关于GetThreadId

  这个函数在Windows Server 2003之前的平台上是没有的,而我在写类库的时候偏偏需要这个功能,无奈的参考了MSDN和网络上的各种代码,勉强写出了一个能够使用的GetThreadId。代码我就在这里贴一下吧。也可以到我的Google Code去下载。


GetThreadId.7z

 1 #include <windows.h>
2 #include <tlhelp32.h>
3
4 DWORD GetThreadID(HANDLE hThread,DWORD dwProcessId){
5 HANDLE hThreadSnap=INVALID_HANDLE_VALUE;
6 THREADENTRY32 te32;
7 #ifdef __GNUC__
8 typedef HANDLE (*OPENTHREAD)(DWORD,BOOL,DWORD);
9 OPENTHREAD OpenThread=GetProcAddress(GetModuleHandle("kernel32.dll"),"OpenThread");
10 #endif
11 hThreadSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
12 if(hThreadSnap==INVALID_HANDLE_VALUE){
13 return 1;
14 }
15 te32.dwSize = sizeof(THREADENTRY32);
16 if(::Thread32First(hThreadSnap,&te32)==FALSE){
17 return -1;
18 }
19 while(::Thread32Next(hThreadSnap,&te32)!=FALSE){
20 if(te32.th32OwnerProcessID==dwProcessId){
21 HANDLE hTempThread=OpenThread(THREAD_ALL_ACCESS,FALSE,te32.th32ThreadID);
22 if(hTempThread==hThread){
23 ::CloseHandle(hTempThread);
24 ::CloseHandle(hThreadSnap);
25 return te32.th32ThreadID;
26 }else{
27 ::CloseHandle(hTempThread);
28 }
29 }
30 }
31 return 0;
32 }
posted @ 2012-01-17 21:37  一个无知的C++小子  阅读(260)  评论(0)    收藏  举报