我有一个线程,do{....}while.本来在while条件语句里用了一个全局事件来结束线程。但是后来发现,如果select()语句正在执行,那么这个时候用户要等上select的时间才可以结束线程。于是我设计了另外一个线程,
KillThread()
{
waitforsingleobject(hRequestExitEvent,INIFINITE);
//开始结束那个网络线程。
}
有没有其他方法?
KillThread()
{
waitforsingleobject(hRequestExitEvent,INIFINITE);
//开始结束那个网络线程。
}
有没有其他方法?
方法1 :
其实最简单的办法就是在程序退出的时候调用WSACleanup();就得了
WinSock会自动收回申请的资源
-----------------------------------------------------------------
方法2:
在监听的函数recv里面自己设定
比如收到"[exit]"这样的字符,就调用AfxEndThread或者直接return结束线程自身
------------------------------------------------------------------
方法3:
我用的是 WSAEventSelect,本来等几个 WSAEVENT 就可以了,结果我多加一个 WSAEVENT,而这个 WSAEVENT 和网络事件无关,仅仅只在主程序想结束该辅助线程时被传信,那么主程序结束时,传信该 WSAEVENT,辅助线程那边 WSAEventSelect 就有动静了,然后就可以自己收尾退出了。
-----------------------------------------------------------------------
方法4:
同时检测网络事件(FD_ACCEPT)(m_hNetEvent)和线程关闭事件(m_hExitEvent),如果是m_hExitEvent, 就结束线程