使用accept阻塞的时候,耗cpu么?

gauldoth 2009-09-15 10:44:14
RT,比如程序运行到accept后,阻塞了,等待在那,这样会耗费资源么?
阻塞和Sleep有啥区别?

另外,网络编程写服务器的时候,写了一个线程。线程中是一个死循环不断接受来自客户端的连接。

while(1)
{
SOCKET socket=Recv(socketListen,NULL,NULL);
...
...
}
return;

那么如何退出该线程呢?假如用while(bExit),通过将bExit的值设为false来退出该循环,貌似能行。但是运行到Recv就阻塞住了。。还是没法退出。。
...全文
367 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoxiaowei 2009-09-15
  • 打赏
  • 举报
回复
将接受的socket改为非阻塞模式,或者做个超时判定
gauldoth 2009-09-15
  • 打赏
  • 举报
回复
谢谢。
现在是单独开个线程来接收连接,也是设置个BOOL变量。
问题是执行到accept就卡住了,执行不到下次循环,也就检测不了while()中的BOOL变量是真是假了。。
jasonM2008 2009-09-15
  • 打赏
  • 举报
回复
阻塞倒不会耗CPU,但是你的程序的效率就低了!
Sleep 就是当轮到CPU调用这个线程了,但是要等到这次睡眠结束才能调度此线程,再等下一次再来调度,看是否Sleep完了!!!
而阻塞在底层是通过Event来实现的,当调度此线程的时候看看是否有数据来,有的话就接受数据,然后返回,没有的话等待,然后可能CPU会去调用其他线程!

可以单独开个线程来接收连接,单独开个线程来读取数据,通过设置BOOL变量来退出时可以的!

18,356

社区成员

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

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