当前位置: 首页 > news >正文

Boost.asio中的协程队列库

目录
  • 简介
  • 简单使用

简介

本文主要记录一下自己在使用Boost.asio时发现的一个协程队列库boost::asio::experimental::concurrent_channel。发现的路径也很搞笑,我当时需要一个队列库,因为使用的asio,所以想让AI帮忙使用Boost.asio基于协程写一个队列库,但是AI实现的有点差,于是继续让AI优化,结果它自己帮我找到了这个库。

从这个队列库的名字也可以看出,这个库还是在实验中,但是作为玩具项目中使用是没有问题的。

简单使用

auto queue = boost::asio::experimental::concurrent_channel<void(boost::system::error_code, int)>(executor, 5);co_await queue.async_send(boost::system::error_code{}, value);int value = co_await queue.async_receive(asio::use_awaitable);

boost::asio::experimental::concurrent_channel是一个模板,模板参数void(boost::system::error_code, int)void似乎是没有作用的,boost::system:error_code是必须的,int则是队列中的值。当发送时的error_code不为空的时候,接受时会抛出异常。队列也可以存储多个值,如下:

auto queue = boost::asio::experimental::concurrent_channel<void(boost::system::error_code, int, std::string)>(executor, 5);co_await queue.async_send(boost::system::error_code{}, 1, "2");auto [v1, v2] = co_await queue.async_receive(asio::use_awaitable);

构造函数有两个,一个是executor,不必多说;另一个是队列数量的最大值,如果超出这个值,还继续发送,则会陷入等待。

Github Gist: concurrent_channel

http://www.hskmm.com/?act=detail&tid=39660

相关文章:

  • 第6天(简单题中等题 不定长滑动窗口)
  • 代码大全阅读笔记
  • 主动求索:大学生应掌控学习与时间
  • 沉入 遗忘 海底 躲进 存在感的盲区 kill my memory 请把项上垃圾移去
  • 2025.10.25 测试 广二 + 梦熊
  • Serilog 日志库的简介
  • 2025东莞环评公司/环评手续/环评报告/环评验收推荐:广东三洁环保,专业高效,合规保障
  • word文档使用技巧----一键插入题注
  • 再见 懦弱者的泪滴 善恶判断舍弃 永别 那廉价的正义
  • 变盲从为探索:专注听课
  • 以听为基,以做为翼
  • 【CI130x-离在线】FreeRTOS的信号量
  • 践行 “学思行”,解锁学习新境界
  • 【ArcMap】按属性表复制字段并上移一段距离
  • CF1060
  • 以专注筑基,以实践致远
  • 2025.10.24 测试
  • 102302139 尚子骐 数据采集与融合作业1
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解
  • Audacity:开源音频编辑器的完整指南
  • 123456789
  • 【CI130x】音频传输的数据结构——FreeRTOS的消息队列
  • 量子力学作业3
  • #20232408 2025-2026-1 《网络系统与攻防技术》实验三实验报告 - 20232408
  • C_结构体学习_1
  • 嵌入式音频开发很好的博主
  • 实验3 C语言函数应用编程
  • 人工智能之编程基础 Python 入门:第一章 Python 的简介和安装
  • P5405 [CTS2019] 氪金手游 题解
  • 杂记选做 #1