MrE*_*vil 10 c++ multithreading boost boost-asio
有没有人有一个很好的指向使用Boost线程库与Boost ASIO的期货的例子?我有一个现有的异步库,它使用回调函数,我想为其提供更友好的同步接口.
Tan*_*ury 10
如果不了解与现有异步库的交互,就很难提供简洁的解决方案.不过,这个答案使用Boost.Future和Boost.Asio来实现一个Active Object模式.在创建a时future,请考虑检查现有的异步库以确定哪种方法更合适:
future.该仿函数可以在Boost.Asio的上下文中执行io_service.可能需要一些额外的包装级别来与现有的异步库集成,以及解决rvalue语义.如果当前函数调用已经返回值,请考虑使用此方法.promise作为参数,并在函数内填充它.该promise会绑定到提供给Boost.Asio的处理程序io_service.与此同时boost::packaged_task,它可能需要额外的包装级别来处理rvalue语义.最后,Boost.Asio 1.54(目前处于测试阶段)为C++期货提供一流的支持.这是官方的例子.即使您目前无法使用1.54 beta,检查界面和实现也许是有益的.
你能看看这个例子:
http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/example/cpp11/futures/daytime_client.cpp
它显示了如何使用std::futureboost asio.
关键点是包含文件use_future.hpp:
#include <boost/asio/use_future.hpp>
Run Code Online (Sandbox Code Playgroud)
然后你可以编写这样的代码:
std::future<std::size_t> my_future =
my_socket.async_read_some(my_buffer, boost::asio::use_future);
Run Code Online (Sandbox Code Playgroud)
如果你需要使用boost::future那么我建议实现另一个变体,类似于boost::asio::use_future.
该文件use_future.hpp就是一个很好的例子.
| 归档时间: |
|
| 查看次数: |
8216 次 |
| 最近记录: |