如何在Windows和Linux下获取当前线程的ID号

如何在Windows和Linux下获取当前线程的ID号,第1张

Linux下获取当前线程ID号函数

pthread_t pthread_self()

返回:当前线程的ID号

pthread_t 数据类型的定义如下:

typedef unsigned long int pthread_t

sizeof(pthread_t) = 4,4个字节的整数。

Windows下获取当前线程ID号的函数:

DWORD GetCurrentThreadId()

返回值:当前线程的ID号

DWORD数据类型定义:

typedef unsigned long DWORD

在Windows下pthread-win库的pthread_t定义如下:

typedef struct {

void * p /*Pointer to actual object */

unsigned int x/*Extra information - reuse count etc */

} ptw32_handle_t

typedef ptw32_handle_t pthread_t

与Linux的thread_t不一样,它是一个结构,不是一个整数值

在Windows和Linux下可用的获取线程ID号的内联函数如下:

#ifdef WIN32

#include <windows.h>

#else

#include <pthread.h>

#endif

inline unsigned int PthreadSelf()

{

#ifdef WIN32

return::GetCurrentThreadId()

#else

returnthread_self()

#endif

}

pthread_join一般是主线程来调用,用来等待子线程退出,因为是等待,所以是阻塞的,一般主线程会依次join所有它创建的子线程。

pthread_exit一般是子线程调用,用来结束当前线程。

子线程可以通过pthread_exit传递一个返回值,而主线程通过pthread_join获得该返回值,从而判断该子线程的退出是正常还是异常。

执行完成后隐式退出

由线程本身显示调用pthread_exit 函数退出;

pthread_exit (void * retval)

被其他线程用pthread_cance函数终止:

pthread_cance (pthread_t thread)

解决办法:

// 创建线程前设置 PTHREAD_CREATE_DETACHED 属性

pthread_attr_t attr

pthread_t thread

pthread_attr_init (&attr)

pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED)

pthread_create (&thread, &attr, &thread_function, NULL)

pthread_attr_destroy (&attr)

当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。

当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self())


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8648518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存