首先,线程句柄要通过CloseHandle关闭,但不是每个句柄都需要关闭,内核对象的句柄需要关闭。
关于内核对象的介绍参考:http://www.cppblog.com/zwp/archive/2008/12/27/70525.html
介绍_beginthread、_beginthreadEx、CreateThread之间的关系参见一下内容:
http://blog.csdn.net/gengshenghong/article/details/6945216
http://wenku.baidu.com/view/adede4ec4afe04a1b071dea4.html
OK,现在我来说说我用_beginthread、_beginthreadEx的经验
#include <Windows.h>
#include <process.h>
void __cdecl ThreadProc(void *para)
{
printf("sub thread started\n");
// TODO: Add your thread code here.
printf("sub thread finished\n");
_endthread(); // 可以省略,隐含会调用。
}
int main(int argc, char* argv[])
{
HANDLE hThread = (HANDLE)_beginthread(ThreadProc, 0, NULL);
WaitForSingleObject(hThread,INFINITE);
// 因为使用了beginthread()函数,所以这句话加上就错了
// 原因是_endthread()已经释放了句柄资源
// 如果你用了_beginthreadEx() 则加上这句话就没错,可能是因为没有默认调用_endthread()
CloseHandle(hThread);
}