boost::asio 阻塞卡顿问题
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 阻塞卡顿问题相关推荐
- boost::asio::ip::tcp实现阻塞tcp echo客户端的程序
boost::asio::ip::tcp实现阻塞tcp echo客户端的程序 实现功能 C++实现代码 实现功能 boost::asio::ip::tcp实现阻塞tcp echo客户端的程序 C++实 ...
- input反应慢 vue_Vue v-model实时更新带来的输入框卡顿问题
背景 最近在开发的时候,发现在内容较多的页面上对v-model绑定的输入框上输入内容,页面会变得很卡顿,有些带有动画的元素还会闪动,初步怀疑是v-model实时更新引起整个组件(页面)的 re-ren ...
- [iOS]调和 pop 手势导致 AVPlayer 播放卡顿
作者 NewPan 关注 2017.07.15 14:24* 字数 3110 阅读 749评论 8喜欢 17 声明:我为这个框架写了四篇文章: 第一篇:[iOS]UINavigationControl ...
- boost.asio包装类st_asio_wrapper开发教程(2014.5.23更新)(一)-----转
一:什么是st_asio_wrapper 它是一个c/s网络编程框架,基于对boost.asio的包装(最低在boost-1.49.0上调试过),目的是快速的构建一个c/s系统: 二:st_asio_ ...
- boost asio io_service学习笔记
转自:http://hi.baidu.com/jrckkyy/blog/item/e86835d61e60722506088b6a.html 构造函数 构造函数的主要动作就是调用CreateIoCom ...
- Boost asio 定时器
Boost asio入门学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载.文章中有连接失效或是技术谬误的地方,请与我联系. https://blog.csdn.net/luchengtao ...
- boost asio 应用方法学(二)——深入框架
要用好它,就必须先了解它,而且不能停止于表面,必须深入到内部.而了解一件事物,先要了解它的框架,再了解它的细节.了解了框架,我们就有了提纲挈领的认识. 关于 boost asio 框架结构,在其文档中 ...
- boost::asio译文
boost::asio译文 Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布( ...
- 用两张图告诉你,为什么你的App会卡顿?
有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的画面的? 对Android的视图架构有整体把握. 学会 ...
- Android性能优化 - 消除卡顿
性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - TraceView Android性能分析工具 消除卡顿 什么是卡顿及卡顿的衡量标准 产生卡 ...
最新文章
- 爱好历史的程序员,不容错过!
- ECharts测量图,功率图
- 第四届社交机器人论坛第一期开幕:李航、刘群、姜大昕主讲
- 16 岁的雅虎问答,因“不再受欢迎”将永久关闭
- python游戏-Python游戏
- RHEL6.0使用centos的YUM更新源
- CentOS 安装go client调用Kubernetes API
- Transact-SQL数据类型(文本/图形/日期和时间/货币/特定类型)
- c 读取mysql另一个窗体中显示出来_二级ACCESS数据库4窗体的笔试题考点分析
- C#编写程序操作数据库如何防止SQL注入漏洞的发生
- hadoop单击模式环境搭建
- 在没有导师的指导下,研究生如何阅读文献、提出创见、写出论文?
- Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案
- 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!
- 如何将文档转换为一个链接
- diskgenius做win10系统迁移
- PyTorch创建自己的图像分类数据集
- 《A Tale of Two Worlds (CCS‘19)》笔记
- (PADA)Partial Adversarial Domain Adaptation笔记
- Android7.0 PackageManagerService (2) PKMS构造函数的主要工作