求教,CSocket::ReceiveFrom()阻塞导致线程无法退出,怎么解决?

Cacar 2016-05-09 08:33:07
为了避免CSocket跨线程,在线程中新建Socket并开启监听,但由于CSocket::ReceiveFrom()是阻塞的,导致无法判断线程退出标志,引起线程无法退出,如何解决?谢谢!

线程函数()
{
1. 初始化Socket
2. while(!线程停止) // 阻塞在ReceiveFrom,导致无法执行此判断
{
socket.ReceiveFrom(); //此处阻塞,导致while判断无法执行,线程无法退出
}

3. 释放Socket及其它资源
4. 线程结束
}
...全文
892 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenyi0106 2016-07-08
  • 打赏
  • 举报
回复
程序退出时,先设置线程退出标志,在调用socket.Close()即可
fengge8ylf 2016-07-08
  • 打赏
  • 举报
回复
调用CLOSE函数 socket.ReceiveFrom(); 会返回吧
Eleven 2016-07-08
  • 打赏
  • 举报
回复
你主动调用closesocket()
draculacsdn 2016-05-09
  • 打赏
  • 举报
回复
CSocket是阻塞的而CAsyncSocke是非阻塞的!
xian_wwq 2016-05-09
  • 打赏
  • 举报
回复
server侧要有超时检测机制 记录每次数据交互的时间, 一旦时间超过阈值,关闭超时的socket

18,356

社区成员

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

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