在异步编程中, 如果某些条件不满足, 或者用户想强制取消某些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取消异步操作相关推荐

  1. Boost:异步操作,需要boost :: asio :: async_compose函数的测试程序

    Boost:异步操作,需要boost :: asio :: async_compose函数的测试程序 实现功能 C++实现代码 实现功能 boost::asio模块,异步操作,需要boost :: a ...

  2. Boost:异步操作,需要boost :: asio :: async_initiate函数的测试程序

    Boost:异步操作,需要boost :: asio :: async_initiate函数的测试程序 实现功能 C++实现代码 实现功能 boost::asio模块,异步操作,需要boost :: ...

  3. boost::asio译文

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

  4. Boost.Asio技术文档汇总

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  5. Boost asio 官方教程简介

    1. 概述 本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心. 名字本身就说明了一切:Asio 意即异步输入/输出. 该库可以让 C++ 异步地处理数据,且平台独立. 异步数据处理 ...

  6. boost::asio中文文档

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  7. Boost.Asio基本原理

    Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将深入研究比同步编程更复杂.更有乐趣的异步编程. 网络API 这一部分包含了当使用Boost.Asio编写 ...

  8. Boost.Asio技术文档

    文章来源:http://blog.csdn.net/henreash/article/details/7469707 Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手 ...

  9. Boost.Asio 技术文档

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

最新文章

  1. @Value竟然能玩出这么多花样
  2. 四则运算 - java实现(叶尚文, 张鸿)
  3. Spring MVC 配置--解剖
  4. WebSocket连接里客户端和服务器端的Socket ID
  5. .git文件夹_Git幸存者指南
  6. AE快速景深模糊插件:Rowbyte Fast Bokeh for Mac
  7. Zookeeper工作原理(详细)
  8. 分享丨对医学图像分割中的置信度进行量化
  9. linux命令学习——tar
  10. Homebrew基本命令
  11. 如何控制多线程之间的优先级顺序
  12. Kibana 自定义索引模式 Index patterns
  13. Python实现鼠标自动在屏幕上随机移动
  14. 【宏】解决vcard乱码批量导入outlook
  15. 使用傅里叶模态法分析闪耀光栅
  16. R可视化:plot函数基础操作
  17. 刷 百度排名,百度(google)搜索提示下拉关联词的一个简易思路··
  18. 【ChatGPT】多国“围堵”,万人抵制,AI发展的红线到底在哪?
  19. APP STORE又崩了?可以通过DNS解决!
  20. Flutter App 软件测试指南

热门文章

  1. sublime怎么运行go_go语言环境搭建+sublime text3(windows环境下)
  2. c语言合法自定义标识符_c语言合法标识符的要求是什么
  3. oracle怎么执行存储过程_分享一个分析Oracle存储过程性能小技巧
  4. Python中的浅复制(shallow copy)和深复制(deep copy)
  5. LeetCode:67. 二进制求和(python、c++)
  6. 《深度学习笔记》——loss函数的学习笔记
  7. hihocoder1241 Best Route in a Grid
  8. leetcode889.ConstructBinaryTreefromPreorderandPostorderTrav
  9. flex include和import
  10. 【linux】ubuntu11.10下各种问题以及解决方案