2011-07-13 15 views
1

假设我在某些结构(WinAPI)中保留了DWORD thread_Id。
(我在询问thread_ID而不是thread_handle在这个问题中的确很容易确保两者)空线程标识符[WinAPI](非线程句柄)

我需要初始化threadId变量为一些空值。

所以我要定义我的NULL_THREAD_ID值。

是否在msdn的任何位置记录了哪个DWORD值真实的线程永远不能具有thread_ID? 0或(DWORD)-1?

HANDLE WINAPI CreateThread(
    __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, 
    __in  SIZE_T dwStackSize, 
    __in  LPTHREAD_START_ROUTINE lpStartAddress, 
    __in_opt LPVOID lpParameter, 
    __in  DWORD dwCreationFlags, 
    __out_opt LPDWORD lpThreadId 
    ); 

回答

2

GetThreadId,例如,给你答案的谜题。它返回线程ID和文档状态:

如果函数失败,则返回值为零。

因此,零不能是有效的线程ID。

0

是:检查在CreateThread

如果函数成功,返回值是一个句柄到新的线程。

如果函数失败,则返回值为NULL。

和空= 0

Update:注意,没有线程标识符将永远为0

+0

增加了关于线程ID与线程hande的区别。关于句柄,你是对的,句柄可以初始化为NULL或(HANDLE)-1(又名INVALID_HANDLE_VALUE)。我在问关于DWORD类型的线程ID。 – Andrei

+0

-1 OP询问线程标识而不是线程句柄。 –