找回密码
 立即注册
首页 业界区 安全 Boost.asio中的协程队列库

Boost.asio中的协程队列库

颜才 4 天前
目录

  • 简介
  • 简单使用

简介

本文主要记录一下自己在使用Boost.asio时发现的一个协程队列库boost::asio::experimental::concurrent_channel。发现的路径也很搞笑,我当时需要一个队列库,因为使用的asio,所以想让AI帮忙使用Boost.asio基于协程写一个队列库,但是AI实现的有点差,于是继续让AI优化,结果它自己帮我找到了这个库。
从这个队列库的名字也可以看出,这个库还是在实验中,但是作为玩具项目中使用是没有问题的。
简单使用
  1. auto queue = boost::asio::experimental::concurrent_channel<void(boost::system::error_code, int)>(executor, 5);
  2. co_await queue.async_send(boost::system::error_code{}, value);
  3. 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不为空的时候,接受时会抛出异常。队列也可以存储多个值,如下:
  1. auto queue = boost::asio::experimental::concurrent_channel<void(boost::system::error_code, int, std::string)>(executor, 5);
  2. co_await queue.async_send(boost::system::error_code{}, 1, "2");
  3. auto [v1, v2] = co_await queue.async_receive(asio::use_awaitable);
复制代码
构造函数有两个,一个是executor,不必多说;另一个是队列数量的最大值,如果超出这个值,还继续发送,则会陷入等待。
Github Gist: concurrent_channel

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

相关推荐

您需要登录后才可以回帖 登录 | 立即注册