关于winsock select 模式,该怎么用啊

sdu_hanson 2014-04-04 10:56:13
我是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;
}
}

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

...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mayudong1 2014-04-04
  • 打赏
  • 举报
回复
如果只有 一个连接,直接开一个线程爱怎么用就怎么用了,select的优势是可以在一个线程中同时管理多个连接
sdu_hanson 2014-04-04
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
你可以将这些放到工作线程中去做~
只能这样是吧? 那我感觉它跟阻塞模式也差不多啊。
Eleven 2014-04-04
  • 打赏
  • 举报
回复
你可以将这些放到工作线程中去做~
sdu_hanson 2014-04-04
  • 打赏
  • 举报
回复
引用 4 楼 CharlesSimonyi 的回复:
select模式下的套接字是非阻塞的,但是select函数本身是阻塞的。 该模式不能用于UI线程中,因为会阻塞UI线程,一般是开一个工作线程,在工作线程中处理。 如果要在UI线程中处理的话,需要WSAAsyncSelect模型
恩,明白了。谢谢你
encoderlee 2014-04-04
  • 打赏
  • 举报
回复
select模式下的套接字是非阻塞的,但是select函数本身是阻塞的。 该模式不能用于UI线程中,因为会阻塞UI线程,一般是开一个工作线程,在工作线程中处理。 如果要在UI线程中处理的话,需要WSAAsyncSelect模型

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧