情况是这样的:我在一个线程中又起了几个工作线程,分别处理大量的工作,但是我想在应用程序退出时强制关闭所有的线程。
我试过:在工作线程中用消息对队然后PostThreadMessage(WM_QUIT)和ExitThread(...)等,但是工作线程在访问一些对像是会出错,且资源不会释放。我应该采用何种机制呢?

解决方案 »

  1.   

    TerminateThread() 函数可以。如果不带消息环的线程发消息没有用的。
      

  2.   

    使用event 或mutex, 使那个线程再其上等待.如果发现被通知便自动退出,如果不是通知
    状态,而是超时或其他则继续运行.
      

  3.   

    //例如要结束三个线程
    HANDLE ThreadHandle[3];
      ................
      ................
    TerminateThread( ThreadHandle[0], 0 );
    TerminateThread( ThreadHandle[1], 0 );
    TerminateThread( ThreadHandle[2], 0 );DWIRD dwRet = WaitForMultipleObjects( 3,  ThreadHandle, TRUE, dwMilliseconds ); // 等待dwMilliseconds
    switch(dwRet)
    {
    case WAIT_OBJECT_0:
    // 可以退出程序了
    break; case WAIT_ABANDONED_0
    break; case WAIT_TIMEOUT:
    break;
    }