mirror of
https://github.com/boostorg/asio.git
synced 2026-01-27 18:42:07 +00:00
Added new overloads of experimental::make_parallel_group that may be used
to launch a dynamically-sized set of asynchronous operations, where all
operations are the same type. For example:
using op_type = decltype(
socket1.async_read_some(
boost::asio::buffer(data1),
boost::asio::deferred
)
);
std::vector<op_type> ops;
ops.push_back(
socket1.async_read_some(
boost::asio::buffer(data1),
boost::asio::deferred
)
);
ops.push_back(
socket2.async_read_some(
boost::asio::buffer(data2),
boost::asio::deferred
)
);
boost::asio::experimental::make_parallel_group(ops).async_wait(
boost::asio::experimental::wait_for_all(),
[](
std::vector<std::size_t> completion_order,
std::vector<boost::system::error_code> e,
std::vector<std::size_t> n
)
{
for (std::size_t i = 0; i < completion_order.size(); ++i)
{
std::size_t idx = completion_order[i];
std::cout << "socket " << idx << " finished: ";
std::cout << e[idx] << ", " << n[idx] << "\n";
}
}
);
Thanks go to Klemens Morgenstern for supplying part of this implementation.
38 lines
1.2 KiB
Plaintext
38 lines
1.2 KiB
Plaintext
#
|
|
# Copyright (c) 2003-2022 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)
|
|
#
|
|
|
|
lib socket ; # SOLARIS
|
|
lib nsl ; # SOLARIS
|
|
lib ws2_32 ; # NT
|
|
lib mswsock ; # NT
|
|
lib ipv6 ; # HPUX
|
|
lib network ; # HAIKU
|
|
|
|
project
|
|
: requirements
|
|
<library>/boost/system//boost_system
|
|
<library>/boost/chrono//boost_chrono
|
|
<define>BOOST_ALL_NO_LIB=1
|
|
<threading>multi
|
|
<target-os>solaris:<library>socket
|
|
<target-os>solaris:<library>nsl
|
|
<target-os>windows:<define>_WIN32_WINNT=0x0501
|
|
<target-os>windows,<toolset>gcc:<library>ws2_32
|
|
<target-os>windows,<toolset>gcc:<library>mswsock
|
|
<target-os>windows,<toolset>gcc-cygwin:<define>__USE_W32_SOCKETS
|
|
<target-os>hpux,<toolset>gcc:<define>_XOPEN_SOURCE_EXTENDED
|
|
<target-os>hpux:<library>ipv6
|
|
<target-os>haiku:<library>network
|
|
;
|
|
|
|
exe parallel_sort : parallel_sort.cpp ;
|
|
exe ranged_wait_for_all : ranged_wait_for_all.cpp ;
|
|
exe wait_for_all : wait_for_all.cpp ;
|
|
exe wait_for_one : wait_for_one.cpp ;
|
|
exe wait_for_one_error : wait_for_one_error.cpp ;
|
|
exe wait_for_one_success : wait_for_one_success.cpp ;
|