给出一个互斥量作为线程关闭的标记, 一个布尔变量作为简单通讯变量
WaitForSingObject( ...)
while (canExit==FALSE){
}
ReleaseMutex(...)
这样外面就可以安全关闭线程了.

解决方案 »

  1.   

    UI线程可以采用发送WM_QUIT消息的方式。
    pThread->PostThreadMessage(WM_QUIT, 0, 0);WORK线程可以定义一个事件
    HANDLE hKillThread;UINT ThreadProc(LPVOID lpParam)
    {
      while(1){
        if(WaitForSingleObject(hKillThread, 1000) == WAIT_OBJECT_0){
            break;
        }
        .....
      }  return 0;  
    }
      

  2.   

    自定义一个消息:
        #define WM_FINISHED WM_USER+1
    然后调用:
        ::PostMessage((HWND)pParam,WM_FINISHED,0,0)
      

  3.   

    线程是多个,且线程中的while(1)循环内有socket阻塞式通信,当超时时从线程外部终止超时的线程。怎么实现?
      

  4.   

    强行CLOSE时要注意:
     socket内不要用new(包括CString, 动态分配的buffer)
      否则Memory Leak
     socket内不能用MessageBox()
      否则Access violation
    我的一点经验
      

  5.   

    还不能发送消息。最好的方法,是在socket循环中检查退出标志,确定是否中断当前连接。
    另外,在发送WM_QUIT后,必须WaitforSingleObject,直到pThread中的句柄为空
      

  6.   

    我们的软件中,有对Socket退出的处理,你可以下载看看
    我们的网址:http://www.intertimes.com.cn