也就是说_beginthreadex什么条件下就会创建一个无效线程句柄?在代码正确的情况下
无效线程句柄,你指的应该是 -1 (INVALID_HANDLE_VALUE), 线程创建失败的情况下,就会返回-1。 至于创建失败的情况,有很多吧,比如
ERROR_NOT_ENOUGH_MEMORY 没有足够的空间 等等原因,具体原因可以使用Getlasterror获取。
修正我上面的回答 (不好意思,你是问的搭建环境的方法)
unsigned int __stdcall pro(void* pParam)
{
return 0;
}
for (int i=0;;i++)
{
HANDLE h = (HANDLE)_beginthreadex(0, 0, pro, NULL, CREATE_SUSPENDED, 0);
printf("h = %d i=%d \n", h, i);
if (INVALID_HANDLE_VALUE == h)
{
printf("err = %d\n", GetLastError());
break;
}
else if (h == 0)
{
printf("err = %d\n", GetLastError());
break;
}
}
getchar();
运行结果为:
....
...
h=5888 i=1449
h=0 i=1450
err = 8
看来返回0,应该也是无效的