boost::asio 阻塞卡顿问题

在windows使用boost库 1.70.x 版本, 使用相关的asio功能, 遇到了ioservice 无法退出的情况, 经调试卡顿在 win_iocp_io_context::shutdown() 函数无法退出, 后修改了此函数

while (::InterlockedExchangeAdd(&outstanding_work_, 0) > 0){op_queue<win_iocp_operation> ops;timer_queues_.get_all_timers(ops);ops.push(completed_ops_);if (!ops.empty()){while (win_iocp_operation* op = ops.front()){ops.pop();::InterlockedDecrement(&outstanding_work_);op->destroy();}}else{DWORD bytes_transferred = 0;dword_ptr_t completion_key = 0;LPOVERLAPPED overlapped = 0;::GetQueuedCompletionStatus(iocp_.handle, &bytes_transferred,&completion_key, &overlapped, gqcs_timeout_);if (overlapped){::InterlockedDecrement(&outstanding_work_);static_cast<win_iocp_operation*>(overlapped)->destroy();}else { break;  } // fix: add new code for quite !}

在使用 boost::asio::simple_queue 构建队列, 使用 boost::asio::queue_sender, boost::asio::queue_listener 中,
也遇到 队列不能退出, block 阻塞问题, 主要是service 中还挂载着异步io请求, 要释放这个请求。 解决的方案是:

msg 退出message
_message_queue_receiver->async_enq(msg,
boost::bind(&class_xxxx::on_receiver_default<boost::shared_ptr>, this));

在消息处理函数中 收到此消息 msg 时, 不在发起异步io请求调用, 即不再调用:

_message_queue_poster->async_deq(boost::bind(&class_xxxx::pickup_message, this, err, boost::placeholders::_2));

boost::asio 阻塞卡顿问题相关推荐

  1. boost::asio::ip::tcp实现阻塞tcp echo客户端的程序

    boost::asio::ip::tcp实现阻塞tcp echo客户端的程序 实现功能 C++实现代码 实现功能 boost::asio::ip::tcp实现阻塞tcp echo客户端的程序 C++实 ...

  2. input反应慢 vue_Vue v-model实时更新带来的输入框卡顿问题

    背景 最近在开发的时候,发现在内容较多的页面上对v-model绑定的输入框上输入内容,页面会变得很卡顿,有些带有动画的元素还会闪动,初步怀疑是v-model实时更新引起整个组件(页面)的 re-ren ...

  3. [iOS]调和 pop 手势导致 AVPlayer 播放卡顿

    作者 NewPan 关注 2017.07.15 14:24* 字数 3110 阅读 749评论 8喜欢 17 声明:我为这个框架写了四篇文章: 第一篇:[iOS]UINavigationControl ...

  4. boost.asio包装类st_asio_wrapper开发教程(2014.5.23更新)(一)-----转

    一:什么是st_asio_wrapper 它是一个c/s网络编程框架,基于对boost.asio的包装(最低在boost-1.49.0上调试过),目的是快速的构建一个c/s系统: 二:st_asio_ ...

  5. boost asio io_service学习笔记

    转自:http://hi.baidu.com/jrckkyy/blog/item/e86835d61e60722506088b6a.html 构造函数 构造函数的主要动作就是调用CreateIoCom ...

  6. Boost asio 定时器

    Boost asio入门学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载.文章中有连接失效或是技术谬误的地方,请与我联系. https://blog.csdn.net/luchengtao ...

  7. boost asio 应用方法学(二)——深入框架

    要用好它,就必须先了解它,而且不能停止于表面,必须深入到内部.而了解一件事物,先要了解它的框架,再了解它的细节.了解了框架,我们就有了提纲挈领的认识. 关于 boost asio 框架结构,在其文档中 ...

  8. boost::asio译文

    boost::asio译文 Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布( ...

  9. 用两张图告诉你,为什么你的App会卡顿?

    有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的画面的? 对Android的视图架构有整体把握. 学会 ...

  10. Android性能优化 - 消除卡顿

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - TraceView Android性能分析工具 消除卡顿 什么是卡顿及卡顿的衡量标准 产生卡 ...

最新文章

  1. 爱好历史的程序员,不容错过!
  2. ECharts测量图,功率图
  3. 第四届社交机器人论坛第一期开幕:李航、刘群、姜大昕主讲
  4. 16 岁的雅虎问答,因“不再受欢迎”将永久关闭
  5. python游戏-Python游戏
  6. RHEL6.0使用centos的YUM更新源
  7. CentOS 安装go client调用Kubernetes API
  8. Transact-SQL数据类型(文本/图形/日期和时间/货币/特定类型)
  9. c 读取mysql另一个窗体中显示出来_二级ACCESS数据库4窗体的笔试题考点分析
  10. C#编写程序操作数据库如何防止SQL注入漏洞的发生
  11. hadoop单击模式环境搭建
  12. 在没有导师的指导下,研究生如何阅读文献、提出创见、写出论文?
  13. Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案
  14. 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!
  15. 如何将文档转换为一个链接
  16. diskgenius做win10系统迁移
  17. PyTorch创建自己的图像分类数据集
  18. 《A Tale of Two Worlds (CCS‘19)》笔记
  19. (PADA)Partial Adversarial Domain Adaptation笔记
  20. Android7.0 PackageManagerService (2) PKMS构造函数的主要工作

热门文章

  1. 【蓝桥杯单片机组模块】15、PWM学习(总结版)
  2. c语言大作业酒店管理系统,管理信息系统大作业《酒店管理系统》.doc
  3. FPGA实现千兆以太网发送
  4. STC芯片在Keil中的添加与使用
  5. 卷积码 c语言编码,利用c语言实现卷积码编码器示例
  6. 三维校园(三维虚拟校园)的使用体验
  7. windows通过bat批处理命令,快速清理系统垃圾文件,释放硬盘空间
  8. matlab中阶跃函数算卷积,与冲激函数、阶跃函数的卷积.ppt
  9. 中国各主要大城市经纬度数据
  10. Ribbon界面制作