int main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Proc1,NULL,0,NULL);
CloseHandle(hThread1);
cout<<"main thread is running"<<endl;
//随着主线程的退出,进程结束了,线程1也就退出了
Sleep(10); //添加此语句可观察线程1和主线程并发执行
}
DWORD WINAPI Proc1(LPVOID lpParameter)
{
cout<<"thread1 is running"<<endl;
return 0;
}
请问上述代码运行后为什么会出现图中这种情况
换用BeginThread试试
如果你是想通过CloseHandle关闭线程的话,是无法实现的,可以使用ExitThread。句柄(一个内核对象)的作用的为了操作线程,如果以后无法使用到这个线程句柄,就使用CloseHandle将这个句柄引用计数减一。
Windows操作系统采用的是引用计数的原理进行对内核对象的管理,CloseHandle的作用是将引用计数减一,因为你在声明和CreateThread的时候分别进行了引用计数加一的操作,而线程退出的时候,只会进行一次引用计数减一的操作,而如果引用计数不为0,操作系统将不会回收这个内核对象。
也就是说,main函数没有结束的时候,线程函数是依旧在执行的(引用计数不为0),而main thread is running在thread1 is running之前,应该是主线程先抢占时间片原因,所以主线程会先执行。为什么出现两次main thread is running,测试时我没有出现这种情况... ...所以无法验证