关于winsock select 模式,该如何用

关于winsock select 模式,该怎么用啊
本帖最后由 VisualEleven 于 2014-04-04 11:04:10 编辑
我是C++的初学者,

书上说是select模式是非阻塞的,

但是我看都是用在无限循环里,

这样导致窗体还是不能响应其他动作啊。

问一下select该怎么用呢?

下面贴一下我的代码


SOCKET clientSock;
fd_set readfds;
timeval val;
while(1) 
{
FD_ZERO(&readfds);//init 
FD_SET(m_hSocket,&readfds);//put sockect into 
val.tv_sec =0;//wait time
val.tv_usec= 0;

select(0,&readfds,NULL,NULL,&val);//select mode not block
if(FD_ISSET(m_hSocket,&readfds))
{
clientSock = accept(m_hSocket,NULL,NULL);
break;
}
}

虽然套不是阻塞的了,但是这样写会一直无限循环,窗体没反应。


------解决方案--------------------
你可以将这些放到工作线程中去做~
------解决方案--------------------
如果只有 一个连接,直接开一个线程爱怎么用就怎么用了,select的优势是可以在一个线程中同时管理多个连接
------解决方案--------------------
select模式下的套接字是非阻塞的,但是select函数本身是阻塞的。
该模式不能用于UI线程中,因为会阻塞UI线程,一般是开一个工作线程,在工作线程中处理。
如果要在UI线程中处理的话,需要WSAAsyncSelect模型