我有一个线程,do{....}while.本来在while条件语句里用了一个全局事件来结束线程。但是后来发现,如果select()语句正在执行,那么这个时候用户要等上select的时间才可以结束线程。于是我设计了另外一个线程,
KillThread()
{
waitforsingleobject(hRequestExitEvent,INIFINITE);
//开始结束那个网络线程。
}
有没有其他方法?

解决方案 »

  1.   

    昨天整理的一个FAQ都给你贴上来吧,里面有你需要的^_^http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=196461---------------------------------------------------------------  
     
    方法1  :  
     
    其实最简单的办法就是在程序退出的时候调用WSACleanup();就得了  
     
    WinSock会自动收回申请的资源  
     
    -----------------------------------------------------------------  
     
    方法2:  
     
    在监听的函数recv里面自己设定  
     
    比如收到"[exit]"这样的字符,就调用AfxEndThread或者直接return结束线程自身  
     
    ------------------------------------------------------------------  
     
    方法3:  
       
    我用的是  WSAEventSelect,本来等几个  WSAEVENT  就可以了,结果我多加一个  WSAEVENT,而这个  WSAEVENT  和网络事件无关,仅仅只在主程序想结束该辅助线程时被传信,那么主程序结束时,传信该  WSAEVENT,辅助线程那边  WSAEventSelect  就有动静了,然后就可以自己收尾退出了。  
     
    -----------------------------------------------------------------------  
     
    方法4:  
     
    同时检测网络事件(FD_ACCEPT)(m_hNetEvent)和线程关闭事件(m_hExitEvent),如果是m_hExitEvent,  就结束线程