不要用TerminateThread,你发一个WM_QUIT消息给那个线程让他自己停止。

解决方案 »

  1.   

    TerminateThread使线程非正常终止,所占用的资源没有释放。
    应该想方法通知线程让它自己终止。
      

  2.   

    to: rovoboy(雪花满天) 
    能说说具体怎么做吗?
      

  3.   

    SendMessage不行,我使用CWinThread的PostThreadMessage方法,不过似乎没有办法停下来啊……
      

  4.   

    1、CwinThread * pThread = AfxBeginThread(RUNTIME_CLASS(YourClass));
       //启动CwindThread派生类一般如此。
    2、在线程类中定义消息
       #define WM_STOPTHREAD USER+100;
       BEGIN_MESSAGE_MAP()
       //
       //
       ON_THREAD_MESSAGE(WM_STOPTHREAD,OnStopThread)
       END_MESSAGE_MAP()
    3、编写函数:
       ....::OnStopThread()
       {     ::PostQuitMessage();
             return 0;
        }
    4、最后,终止线程只需如下:
       pThread->PostThreadMessage(WM_STOPTHREAD,0,0);
      

  5.   

    1、CwinThread * pThread = AfxBeginThread(RUNTIME_CLASS(YourClass));
       //启动CwindThread派生类一般如此。
    2、在线程类中定义消息
       #define WM_STOPTHREAD USER+100;
       BEGIN_MESSAGE_MAP()
       //
       //
       ON_THREAD_MESSAGE(WM_STOPTHREAD,OnStopThread)
       END_MESSAGE_MAP()
    3、编写函数:
       ....::OnStopThread()
       {     ::PostQuitMessage();
             return 0;
        }
    4、最后,终止线程只需如下:
       pThread->PostThreadMessage(WM_STOPTHREAD,0,0);
      

  6.   

    如果你的线程不是MFC的CWinThread类,你就用消息循环或WaitforSingleObject监视消息队列中是否有WM_QUIT消息,有则正常退出。
    在控制线程或主线程中用PostThreadMessage(ThreadID,WM_QUIT,0,0);就行。
      

  7.   

    to  larger(滥炸) 我应该在什么地方循环这个消息呢?
      

  8.   

    你的监听过程应该是个循环,用WaitforSingleObject在循环开始时测试一下就行。
      

  9.   

    这是一个比较麻烦的问题,你的线程里面是不能用阻塞方式进行诊听的。应该循环Listen()一小段时间,然后判断是否有其他消息用PeekMessage或GetMessage,然后进行下一次诊听或退出。
      

  10.   

    我的监听线程不坑用peekmessage我要用他来监听网络的……
      

  11.   

    同意 larger:
    如果监听过程是循环,开头WaitforSingleObject(hEvent, 0);
    几乎不耗时循环侦测对象有无信号.要终止时SetEvent(hEvent)
      

  12.   

    是一个while(true)的循环,用来监听网络的。还有能不能说说看用WaitforSingleObject具体怎么实现,我试试看……
      

  13.   

    是一个while(true)的循环,用来监听网络的。还有能不能说说看用WaitforSingleObject具体怎么实现,我试试看……