大致问题是这样:
我有两个在运行的TCP工作线程,一个连接成功在运行,一个在反复尝试链接.
主线程退出时我 g_eClose.SetEvent() ;链接成功的tcp线程中 :
if (::WaitForSingleObject(g_eClose, 0) == WAIT_OBJECT_0)
{
TRACE(" Tcp Tread Exit 222!") ;
return 0 ;
}
为什么链接成功的那个能捕捉到退出信号而反复尝试链接的那个却无法捕捉到呢??? while (1)
{
if (::WaitForSingleObject(g_eClose, 0) == WAIT_OBJECT_0)
{
return FALSE ;
}
if (connect(clientSocket, (struct sockaddr *)&remoAddr, 
sizeof(struct sockaddr)) == SOCKET_ERROR) 

// error=WSAGetLastError() ;
Sleep(500) ;
continue ;
}
return TRUE ;
}

解决方案 »

  1.   

    可能是你创建事件的时候用的是自动重置的方式,这样当一个线程检测到事件后,事件会自动变成非通知状态,所以只有一个线程可以响应,你改成手动重置方式就好了!hThreadEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
      

  2.   

    我定义的全局对象然后直接用了,是不是这样有问题?
    CEvent g_eClose ;(其它地方extern ...) .g_eClose.SetEvent()