//下面三步可以正常停止句柄为hThrd的线程?
(1)GetExitCodeThread(hThrd,&m); //线程外部执行
(2)::ExitThread(m); //线程内部执行
//等待线程的退出
(3)WaitForSingleObject(mVoiceManager.hThrd,INFINITE);
(1)GetExitCodeThread(hThrd,&m); //线程外部执行
(2)::ExitThread(m); //线程内部执行
//等待线程的退出
(3)WaitForSingleObject(mVoiceManager.hThrd,INFINITE);
这个是得到线程退出的代码,如果线程没结束,m得到的值是STILL_ALIVE(2) 可以结束线程,但是资源可能并没有释放掉(3)无限等待线程对象为Signal状态,挂起当前线程,如果等待的线程结束,WaitFor函数返回
1.用CreateThread函数建立新线程 并返回新线程句柄 HANDLE hNewTh;
2.新线程开始处理,线程结束时 调用ExitThread函数. 以上两步就是线程的基本过程,如果建立线程后,有两种结束情况需要注意
1. 需要知道线程的退出代码,则一般用
WaitForSingleObject(mVoiceManager.hThrd,INFINITE); 等待线程结束,并调用
GetExitCodeThread(hThrd,&m) 获取线程退出代码.
2.线程在程序存在期间一直运行,比如socket通信程序,要在主程序结束时通知 线程结束
并用函数WaitForSingleObject(mVoiceManager.hThrd,INFINITE); 等待 不管那种情况结束,线程结束后,要关闭线程句柄 CloseHandle(hNewTh);
{
BOOL ThreadStatus = true;
while (hPort != INVALID_HANDLE_VALUE)
{
if(DriverID.IsEmpty())
{
Sleep(500);
}else
{
com4.PushCommand(CDataDoPacket::Packet_LoginHeartbeat(DriverID)); Sleep(60000);
}
}
return 0;
}
(3)WaitForSingleObject(mVoiceManager.hThrd,INFINITE);
正常关闭CloseThread
强制关闭TerminateThread
return ;比如就这样 要结束的时候改变e 就退出了
(3)WaitForSingleObject(mVoiceManager.hThrd,INFINITE);