我想在主线程中灵活的启动和中止一个工作线程,
线程启动:
m_WorkThread=AfxBeginThread(WorkThreadProc,this,THREAD_PRIORITY_NORMAL);
线程中止:
DWORD exitCode;
::GetExitCodeThread(m_WorkThread->m_hThread,&exitCode);
TerminateThread(m_ScanThread->m_hThread,exitCode);
但是MSDN中说用TerminateThread中止线程的作法很危险!,那怎样安全的中止一个工作线程
线程启动:
m_WorkThread=AfxBeginThread(WorkThreadProc,this,THREAD_PRIORITY_NORMAL);
线程中止:
DWORD exitCode;
::GetExitCodeThread(m_WorkThread->m_hThread,&exitCode);
TerminateThread(m_ScanThread->m_hThread,exitCode);
但是MSDN中说用TerminateThread中止线程的作法很危险!,那怎样安全的中止一个工作线程
bFlag初始为true
while(bFlag)
{
....///想做的工作
}
如果想结束这个线程时,可让用户点击某个按钮,然后再按钮的OnOk里修改bFlag为false,这样工作线程会跳出循环,最后执行到线程函数作用域之外后,它会自行清理,并释放资源,达到自然死亡的效果。
{
if (WaitForSingleObject(m_hEventKillThread, 100) == WAIT_TIMEOUT)
{
//do something
}break;
}可以用SetEvent(m_hEventKillThread);
让线程终止
一般情况下是通知线程的循环体,让线程的循环体自己终止