Does anyone have a good pointer to examples which use futures from the Boost thread library with Boost ASIO? I have an existing asynchronous library which uses callback function that I would like to provide a friendlier synchronous interface for.
If the run() method is called on an object of type boost::asio::io_service, the associated handlers are invoked on the same thread. By using multiple threads, an application can call multiple run() methods simultaneously.
Boost. Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach.
The project is sponsored by Automatak. The stack uses a completely asynchronous design. The core library is written in C++11 and has abstracted execution services, timers, and physical layers called the Platform Abstraction Layer (PAL).
By default, Boost. Asio is a header-only library. However, some developers may prefer to build Boost. Asio using separately compiled source code.
It is difficult to provide a concise solution without understanding the interactions with the existing asynchronous library. Nevertheless, this answer uses Boost.Future and Boost.Asio to implement an Active Object pattern. When creating a future
, consider examining the existing asynchronous library to determine which approach is more appropriate:
future
. This functor can be executed within the context of Boost.Asio io_service
. Some additional level of wrapping may be required to integrate with the existing asynchronous library, as well as work around rvalue semantics. Consider using this approach if the current function calls already return the value.promise
as an argument, and populate it within the function. The promise
would be bound to the handler that is provided to Boost.Asio io_service
. As with boost::packaged_task
, it may require an additional level of wrapping to deal with rvalue semantics.Finally, Boost.Asio 1.54 (currently in beta), provides first-class support for C++ futures. Here is the official example. Even if you are unable to currently use 1.54 beta, it may be beneficial to examine the interface and implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With