小编Joh*_*orn的帖子

我如何利用boost :: packaged_task,函数参数和boost :: asio :: io_service?

首先,我想为冗长的帖子道歉.我希望尽可能彻底.

我已经在这个问题上坚持了几天,并且关于正确使用boost::packaged_task具有输入参数的函数的信息很少令人惊讶.

系统信息

  • C++ 03
  • 提升1.54.0
  • CMake 2.8.9

初始要求

  1. 我有一个由客户端,服务器和设备组成的设置.
  2. 客户端通过向服务器发送请求来与设备交互.
    • 检查这些请求并将其路由到适当的设备.
    • 请求是异步处理的,并且boost::asio::io_service::strand由于各种原因偶尔会排队等候.
  3. 请求被放入设备本身的本地队列中.
    • 当请求已被确认(未完成)时,将为其分配一个ID,并返回给客户端.

打包任务

在查看boost :: futures之后,我们决定使用boost :: packaged_task完全符合我们的需要.但是,打包任务的实现似乎存在错误.

似乎packaged_task有几个不同的模板可供选择:

  1. packaged_task<R>
  2. packaged_task<R()>
  3. packaged_task<R(ArgTypes)>
  4. 其他我可能会失踪的人.

为了确保我正确使用该功能,我开始很简单; 使用boost :: futures页面上的简单示例作为起点.从那里,我创建了四个简单的函数:

  • int返回,没有参数.
  • int return,带参数.
  • std::string 返回,没有参数.
  • std::string 返回,带参数.

测试功能

std::string ans("forty two");

int int_no_params()
{
    return 42;
}

int int_with_params(int param)
{
    return param;
}

std::string string_no_params()
{
    return std::string("forty two");
}

std::string string_with_params(std::string & param) // Have tried both with and without …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost boost-bind boost-asio

6
推荐指数
1
解决办法
4234
查看次数

标签 统计

boost ×1

boost-asio ×1

boost-bind ×1

c++ ×1

multithreading ×1