AimRT/_deps/boost-src/libs/asio/doc/overview/parallel_group.qbk
2025-01-12 20:37:50 +08:00

67 lines
2.4 KiB
Plaintext

[/
/ Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com)
/
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
/]
[section:parallel_group Co-ordinating Parallel Operations]
[note This is an experimental feature.]
The [link boost_asio.reference.experimental__make_parallel_group
`experimental::make_parallel_group`] function may be used to launch work that
is performed in parallel, and wait for one or all of the operations to
complete. A `parallel_group` implements automatic cancellation of incomplete
operations. For example:
experimental::make_parallel_group(
[&](auto token)
{
return stream.async_read_some(boost::asio::buffer(data), token);
},
[&](auto token)
{
return timer.async_wait(token);
}
).async_wait(
experimental::wait_for_one(),
[](
std::array<std::size_t, 2> completion_order,
boost::system::error_code ec1, std::size_t n1,
boost::system::error_code ec2
)
{
// ...
}
);
The conditions for completion of the group may be specified using one of the
four provided function objects [link boost_asio.reference.experimental__wait_for_all
`wait_for_all`], [link boost_asio.reference.experimental__wait_for_one
`wait_for_one`], [link boost_asio.reference.experimental__wait_for_one_success
`wait_for_one_success`], [link boost_asio.reference.experimental__wait_for_one_error
`wait_for_one_error`], or with a custom function.
The `parallel_group` facility can also be combined with [link
boost_asio.reference.deferred `deferred`] as follows:
experimental::make_parallel_group(
stream.async_read_some(boost::asio::buffer(data), deferred),
timer.async_wait(experimental::deferred)
).async_wait(
// ...
);
Note: for maximum flexibility, `parallel_group` does not propagate the
executor automatically to the operations within the group.
[heading See Also]
[link boost_asio.reference.experimental__make_parallel_group experimental::make_parallel_group],
[link boost_asio.reference.experimental__parallel_group experimental::parallel_group],
[link boost_asio.examples.cpp11_examples.parallel_groups Parallel Groups examples (C++11)],
[link boost_asio.examples.cpp14_examples.parallel_groups Parallel Groups examples (C++14)].
[endsect]