我正在使用windows api线程,我想比较线程ID。
首先,我使用CreateThread()创建一个线程,并存储从函数中获取的句柄(HANDLE)和ID(LPDWORD)。
然后我使用GetCurrentThread()和GetThreadId()从创建的线程中获取句柄和id。
我总是为两个句柄和两个ID获得不同的值。
有没有办法以与pthread类似的方式比较线程?
我这样做是为了确认正确执行的调试选项。我总是得到其他库(pthread.h,threads.h)的正确结果,但不是来自windows api。这不是一个关键问题,但我想学习winapi中的程序
答案 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()
来检索真实句柄。