永远都不要用TerminateThread()这个东东.相关的帖子在本论坛很多多,你搜索一下,很多多的.

解决方案 »

  1.   

    如果你确实很不方便控制的话,改成用户界面线程,想什么时候退出,::PostThreadMessage ( ...->ID , WM_QUIT, 0 , 0 );就可以了.
      

  2.   

    用了TerminateThread()后,记得用CloseHandle()清理一下。
      

  3.   

    1.工作者线程是不能接收消息的,必须是用户界面线程才能接收消息.
    2.怎么影响全局变量?
      2.1,坚决弃用TerminateThread(),你就不会无法控制全局变量.
      2.2,不用全局变量
      2.3,采用用户界面线程,想退出,::PostThreadMessage(),剩下的是你可以不管,顶多在线程的ExitInstance()里作些处理(要处理全局变量,这里可以的).
      

  4.   


        错,任何线程都是可以接收消息的。使用GetMessage即可。用户界面线程与工作者线程唯一的区别在于用户界面线程显式创建了主窗口。在线程消息这一级别是一样的。而对于操作系统来讲,任何线程都一样。
      

  5.   

    你可以设法让线程先从阻塞函数里跳出来。比如阻塞在accept上时。你可以创建一个socket,连到它的监听端口,这样accept接到一个请求,就可以跳出来了,其他阻塞函数也可以类似的处理:
    VSocket socket;
    socket.Create();
    socket.Bind(0);
    socket.Connect("localhost", m_port);
    socket.Close();
      

  6.   

    多谢classfactory兄指教。
    是我弄错了,多谢...