Boost.Asio取消异步操作
在异步编程中, 如果某些条件不满足, 或者用户想强制取消某些IO操作, 此时也需要终止启动的异步操作. 下面给出一个常用的方法.
#include <boost/asio.hpp>
#include <iostream>
#include <thread>
#include <memory>
#include <chrono>using namespace boost;int main() {std::string raw_ip_address = "127.0.0.1";unsigned short port_num = 6768;try {asio::ip::tcp::endpoint ep(asio::ip::address::from_string(raw_ip_address),port_num);asio::io_context ioc;std::shared_ptr<asio::ip::tcp::socket> sock(new asio::ip::tcp::socket(ioc, ep.protocol()));sock->async_connect(ep,[sock](const boost::system::error_code &ec) {if (ec.value() != 0) {if (ec == asio::error::operation_aborted) {std::cout << "Operation cancelled!\n";} else {std::cout << "Error occurred!"<< " Error code = "<< ec.value()<< ". Message: "<< ec.message();}}return;});// 运行Boost.Asio的事件循环, 在新的线程启动std::thread worker_thread([&ioc]() {try {ioc.run();} catch (boost::system::system_error &e) {std::cout << "Error occurred!"<< " Error code = " << e.code()<< ". Message: " << e.what();}});// 模拟处理其它任务std::this_thread::sleep_for(std::chrono::seconds(2));sock->cancel(); // 这里会启动异步回调函数worker_thread.join();} catch (boost::system::system_error &e) {std::cout << "Main Error occurred! Error code = " << e.code()<< ". Message: " << e.what();return e.code().value();}return 0;
}
输出结果:
Error occurred! Error code = 111. Message: Connection refused
上述代码中, io_context
在新线程启动的原理可以参考这个笔记
Boost.Asio取消异步操作相关推荐
- Boost:异步操作,需要boost :: asio :: async_compose函数的测试程序
Boost:异步操作,需要boost :: asio :: async_compose函数的测试程序 实现功能 C++实现代码 实现功能 boost::asio模块,异步操作,需要boost :: a ...
- Boost:异步操作,需要boost :: asio :: async_initiate函数的测试程序
Boost:异步操作,需要boost :: asio :: async_initiate函数的测试程序 实现功能 C++实现代码 实现功能 boost::asio模块,异步操作,需要boost :: ...
- boost::asio译文
boost::asio译文 Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布( ...
- Boost.Asio技术文档汇总
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...
- Boost asio 官方教程简介
1. 概述 本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心. 名字本身就说明了一切:Asio 意即异步输入/输出. 该库可以让 C++ 异步地处理数据,且平台独立. 异步数据处理 ...
- boost::asio中文文档
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...
- Boost.Asio基本原理
Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将深入研究比同步编程更复杂.更有乐趣的异步编程. 网络API 这一部分包含了当使用Boost.Asio编写 ...
- Boost.Asio技术文档
文章来源:http://blog.csdn.net/henreash/article/details/7469707 Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手 ...
- Boost.Asio 技术文档
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...
最新文章
- @Value竟然能玩出这么多花样
- 四则运算 - java实现(叶尚文, 张鸿)
- Spring MVC 配置--解剖
- WebSocket连接里客户端和服务器端的Socket ID
- .git文件夹_Git幸存者指南
- AE快速景深模糊插件:Rowbyte Fast Bokeh for Mac
- Zookeeper工作原理(详细)
- 分享丨对医学图像分割中的置信度进行量化
- linux命令学习——tar
- Homebrew基本命令
- 如何控制多线程之间的优先级顺序
- Kibana 自定义索引模式 Index patterns
- Python实现鼠标自动在屏幕上随机移动
- 【宏】解决vcard乱码批量导入outlook
- 使用傅里叶模态法分析闪耀光栅
- R可视化:plot函数基础操作
- 刷 百度排名,百度(google)搜索提示下拉关联词的一个简易思路··
- 【ChatGPT】多国“围堵”,万人抵制,AI发展的红线到底在哪?
- APP STORE又崩了?可以通过DNS解决!
- Flutter App 软件测试指南
热门文章
- sublime怎么运行go_go语言环境搭建+sublime text3(windows环境下)
- c语言合法自定义标识符_c语言合法标识符的要求是什么
- oracle怎么执行存储过程_分享一个分析Oracle存储过程性能小技巧
- Python中的浅复制(shallow copy)和深复制(deep copy)
- LeetCode:67. 二进制求和(python、c++)
- 《深度学习笔记》——loss函数的学习笔记
- hihocoder1241 Best Route in a Grid
- leetcode889.ConstructBinaryTreefromPreorderandPostorderTrav
- flex include和import
- 【linux】ubuntu11.10下各种问题以及解决方案