WaitForSingleObject在等什么?满足它的条件就可以了。

解决方案 »

  1.   

    CreateThread()以后被调用的线程运行完成以后自动释放内存空间
    可以查看中debug windows中的threads
      

  2.   

    设置timeout参数啊,这样,如果一直等不到事件,就会超时,然后处理超时的情况,再酌情退出就可以了
      

  3.   

    to:yu_hl
      比如说等一个用户连接,而现在没有用户,或者等待一个内核计时器有信号,这时要终止他,怎么办?
      

  4.   

    可以用一个事件来控制。
    HANDLE hQuitEvent = CreateEvent(...);
    那个WaitForSingleObject不要无限等待,可以放在一个循环中,比如:
    while(1)
    {
    ...
    //这里用WaitForSingleObject等待结束事件
    if(WaitForSingleObject(hQuitEvent, 0) == WAIT_OBJECT_0)
    break;
    // 这里不要无限等待
    WaitForSingleObject([your object]...);
    ...
    }
    想终止线程时只要SetEvent(hQuitEvent);
    不过这样效率较低。
      

  5.   

    我真是笨阿。把WaitForMultipleObjects忘了。ft
    终止事件和要等的东西一起等,无限等待,设置只要有一个有信号就返回,根据返回值判断是终止还是所要等的资源有效了。
    这样就可以了。
      

  6.   

    不错,这样对等待事件的确有效,不过对于Socket的等待好象不适用.
      

  7.   

    {
    HANDLE hWaitHandle[2];
    hWaitHandle[0]=CreateEvent();
    hWaitHandle[1]=YourObject;
    //把WaitForSingleObject改成WaitForMultiObject
    //如果线程外SetEvent()或你的线程结束,Wait..返回 
    if ( WaitForMultiObject() < WAIT_OBJECT_0 + 2 )
     {
       //退出
     }
    }
      

  8.   

    可以用WSACreateEvent,WSAEventSelect等函数把一个event与一个网络事件联系起来。
      

  9.   

    Accept()等待也在一个线程中。
      

  10.   

    看看《Win32 多线程程序设计》,也许有相关内容。