我想在主线程中灵活的启动和中止一个工作线程,
线程启动:
  m_WorkThread=AfxBeginThread(WorkThreadProc,this,THREAD_PRIORITY_NORMAL);
  线程中止:
        DWORD exitCode; 
  ::GetExitCodeThread(m_WorkThread->m_hThread,&exitCode);
          TerminateThread(m_ScanThread->m_hThread,exitCode);
但是MSDN中说用TerminateThread中止线程的作法很危险!,那怎样安全的中止一个工作线程

解决方案 »

  1.   

    在线程函数里加个外部标志变量,这个变量的值由外部控制如:
    bFlag初始为true
    while(bFlag)
    {
     ....///想做的工作
    }
    如果想结束这个线程时,可让用户点击某个按钮,然后再按钮的OnOk里修改bFlag为false,这样工作线程会跳出循环,最后执行到线程函数作用域之外后,它会自行清理,并释放资源,达到自然死亡的效果。
      

  2.   

    假设线程体如下while (true)
    {
        if (WaitForSingleObject(m_hEventKillThread, 100) == WAIT_TIMEOUT)
        {
    //do something
    }break;
    }可以用SetEvent(m_hEventKillThread);
    让线程终止
    一般情况下是通知线程的循环体,让线程的循环体自己终止
      

  3.   

    可以设置一个标志量,如果线程在扫描到次标志变化了的话就让它SLEEP,挂起来等你想让它不在睡眠的时候改标志就是