我在关闭窗口的时候可以通知线程结束吗?一般用什么机制? 
像eMule这样的软件,在关闭程序的时候,会通知所有的子线程结束,(应该是中止完毕后),然后关闭主窗口,大家有什么好的方案么?
谢谢!
最好提供示例源代码!

解决方案 »

  1.   

    比如:
    主线程退出代码:
    exitprocess()
    {
       PostThreadMessage(dwThreadID,EXIT_THREAD,NULL,NULL) ;
       waitforsingleobject(hThread,INFINTE) ;
       closehandle(hThread) ;
       ...//继续执行退出代码 
    }dword __stdcall workthread(LPARAM lParam)
    {
        ...
        while(::PeekMessage(&msg,NULL,NULL,NULL,NULL))
       {
          if(msg.message == EXIT_THREAD)
          {
             break ;//如果接收到退出本线程消息就退出
          }
       }
       ...
       return NULL ;
    }一般上面的机制就可以了。
      

  2.   

    你可以使用Event对象来通知线程HANDLE hEvent;hEvent = CreateEvent(NULL, TRUE, NULL, NULL);
    UINT ThreadProc(LPVOID lparam)
    {
        ...........
        ...........
        if(WaitForSingleObject(hEvent,500)!= WAIT_TIMEOUT)
            return 0;
        ..........
        ..........
        return 0;
    }当你想结束线程的时候调用SetEvent(hEvent)即可