Re: CreateThread() question
Hi Igor!
Is h simply a pointer to id (or a value identical to id)?
A thread is uniquely identified by its ID, but there may be multiple
handles referring to the same thread (see e.g. DuplicateHandle). The ID
is valid system-wide, the handle is valid within a single process only.
The handle, in addition to referring to a thread, also carries access
control list specifying what operations you are allowed to perform on
it.
Just a small addition: The thread ID is only unique, if the thread is
running... if the thread has terminated, the OS will "reuse" this
thread-ID after a while.
You can verify this by creating a simple test-program:
#include <windows.h>
#include <tchar.h>
#include <hash_set>
CRITICAL_SECTION cs;
stdext::hash_set<DWORD> s_ThreadIDs;
DWORD WINAPI MyThread(LPVOID)
{
DWORD dwThreadId = GetCurrentThreadId();
EnterCriticalSection(&cs);
if (s_ThreadIDs.find(dwThreadId) != s_ThreadIDs.end())
_tprintf(_T("Duplicate ThreadID: %d\n"), dwThreadId);
else
s_ThreadIDs.insert(dwThreadId);
LeaveCriticalSection(&cs);
return dwThreadId;
}
int _tmain()
{
InitializeCriticalSection(&cs);
int i = 0;
while(true)
{
DWORD dwThreadID;
HANDLE hThread = CreateThread(NULL, 0, MyThread, NULL, 0, &dwThreadID);
if (hThread != INVALID_HANDLE_VALUE)
CloseHandle(hThread);
else
Sleep(1000); // more than about 2000 threads... so be patient...
i++;
if (( i % 100) == 0) Sleep(1);
}
}
--
Greetings
Jochen
My blog about Win32 and .NET
http://blog.kalmbachnet.de/