使用windows api比较线程ID

时间:2014-04-29 19:55:58

标签: c windows multithreading winapi

我正在使用windows api线程,我想比较线程ID。

首先,我使用CreateThread()创建一个线程,并存储从函数中获取的句柄(HANDLE)和ID(LPDWORD)。

然后我使用GetCurrentThread()GetThreadId()从创建的线程中获取句柄和id。

我总是为两个句柄和两个ID获得不同的值。

有没有办法以与pthread类似的方式比较线程?

我这样做是为了确认正确执行的调试选项。我总是得到其他库(pthread.h,threads.h)的正确结果,但不是来自windows api。这不是一个关键问题,但我想学习winapi中的程序

2 个答案:

答案 0 :(得分:2)

您可以使用GetCurrentThreadId()[http://msdn.microsoft.com/en-us/library/windows/desktop/ms683183%28v=vs.85%29.aspx],而不是使用GetCurrentThread()和GetThreadId()。 如前所述,不要在另一个线程上使用伪HANDLE(由GetCurrentThread()返回)。

据我所知,一个线程可能有几个不同的HANDLE,但ID应该是唯一的标识符。

答案 1 :(得分:0)

GetCurrentThread()没有返回真正的句柄。来自MSDN:

  

检索调用线程的伪句柄。   ...   伪句柄是一个特殊的常量,它被解释为当前的线程句柄。

您无法将此值与CreateThread()的结果进行比较。如果您在其他帖子的GetThreadId()中使用此值,则您也无法获得所需的ID。

您可以在伪句柄上使用DuplicateHandle()来检索真实句柄。