颜才 发表于 2025-10-27 01:25:00

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 = co_await queue.async_receive(asio::use_awaitable);构造函数有两个,一个是executor,不必多说;另一个是队列数量的最大值,如果超出这个值,还继续发送,则会陷入等待。
Github Gist: concurrent_channel

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

靳谷雪 发表于 2025-11-10 23:38:02

喜欢鼓捣这些软件,现在用得少,谢谢分享!

陈兰芳 发表于 2025-11-26 18:23:11

谢谢楼主提供!

司寇涵涵 发表于 2025-12-11 04:30:26

这个好,看起来很实用

琉艺戕 发表于 2025-12-22 18:18:30

谢谢分享,试用一下

崔竹 发表于 2025-12-25 00:04:05

这个有用。

娄静曼 发表于 2025-12-26 03:45:17

东西不错很实用谢谢分享

染悄 发表于 2026-1-15 20:07:03

感谢,下载保存了

硫辨姥 发表于 2026-1-17 05:28:42

懂技术并乐意极积无私分享的人越来越少。珍惜

骆贵 发表于 2026-1-18 09:53:47

懂技术并乐意极积无私分享的人越来越少。珍惜

簑威龙 发表于 2026-1-18 13:41:31

感谢发布原创作品,程序园因你更精彩

仇华乐 发表于 2026-1-20 15:02:13

感谢发布原创作品,程序园因你更精彩

邰怀卉 发表于 2026-1-21 17:56:30

收藏一下   不知道什么时候能用到

矛赓宁 发表于 2026-1-26 09:28:31

收藏一下   不知道什么时候能用到

澹台忆然 发表于 2026-1-28 06:15:52

前排留名,哈哈哈

院儿饯 发表于 2026-1-29 04:14:15

感谢分享,学习下。

澹台吉星 发表于 2026-1-29 08:26:28

感谢分享,下载保存了,貌似很强大

仁夹篇 发表于 2026-2-5 17:00:04

yyds。多谢分享

劳怡月 发表于 2026-2-5 21:14:01

喜欢鼓捣这些软件,现在用得少,谢谢分享!

即息极 发表于 2026-2-7 07:04:56

很好很强大我过来先占个楼 待编辑
页: [1] 2
查看完整版本: Boost.asio中的协程队列库