相关疑难解决方法(0)

何时使用`asio_handler_invoke`?

什么时候需要asio_handler_invoke通过简单地包装处理程序来实现无法实现的功能?

演示需要的情况的典型示例asio_handler_invoke将是理想的.

背景

boost asio docs包含了一个如何asio_handler_invoke 这里使用的例子,但我认为它不是一个令人信服的例子,说明为什么要使用调用处理程序.在该示例中,您似乎可以进行如下更改(并删除asio_handler_invoke)并获得相同的结果:

template <typename Arg1>
void operator()(Arg1 arg1)
{
  queue_.add(priority_, std::bind(handler_, arg1));
}
Run Code Online (Sandbox Code Playgroud)

同样,在我关于处理程序跟踪答案中asio_handler_invoke,尽管Tanner Sansbury的回答建议使用调用挂钩作为解决方案,但同样似乎没有必要使用它.

boost用户组上的这个线程提供了更多信息 - 但我不明白其意义.

从我所看到的,它似乎asio_handler_invoke总是被称为asio_handler_invoke(h, &h),似乎没有多大意义.在什么情况下,参数不是(基本上)相同对象的副本?

最后一点 - 我只是io_service::run()从一个线程调用,所以可能是我遗漏了一些来自多线程循环经验的明显东西.

c++ boost-asio

13
推荐指数
1
解决办法
2075
查看次数

boost :: asio :: io_service是否保留了处理程序的顺序?

是否boost::asio::io_service保证以与通过它们给出的顺序相同的方式调用处理程序post()?我在文档中找不到任何说法.假设调用io_service::post是序列化的.

c++ multithreading boost asynchronous boost-asio

12
推荐指数
2
解决办法
2644
查看次数

asio :: async_write和strand

asio::async_write(m_socket, asio::buffer(buf, bytes),
                custom_alloc(m_strand.wrap(custom_alloc(_OnSend))));
Run Code Online (Sandbox Code Playgroud)

此代码是否保证async_write中的所有异步操作处理程序(对async_write_some的调用)都是通过strand调用的?(或者只是为了my_handler?)

c++ multithreading boost boost-asio

3
推荐指数
1
解决办法
1240
查看次数

标签 统计

boost-asio ×3

c++ ×3

boost ×2

multithreading ×2

asynchronous ×1