Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式碼規範

PrevUpHomeNext

co_spawn (6 個多載中的第 2 個)

產生一個新的基於協程的執行緒。

template<
    typename Executor,
    typename AwaitableExecutor,
    typename CompletionToken = DEFAULT>
DEDUCED co_spawn(
    const Executor & ex,
    awaitable< void, AwaitableExecutor > a,
    CompletionToken && token = DEFAULT,
    constraint_t<(is_executor< Executor >::value||execution::is_executor< Executor >::value) &&is_convertible< Executor, AwaitableExecutor >::value >  = 0);
參數

ex

將用於排程新執行緒的執行器。

a

呼叫協程進入點函式所產生的 awaitable 物件。

token

將處理執行緒已完成通知的 完成權杖。完成處理器的函式簽名必須為

void handler(std::exception_ptr);
完成簽名
void(std::exception_ptr)
範例
boost::asio::awaitable<void> echo(tcp::socket socket)
{
  try
  {
    char data[1024];
    for (;;)
    {
      std::size_t n = co_await socket.async_read_some(
          boost::asio::buffer(data), boost::asio::use_awaitable);

      co_await boost::asio::async_write(socket,
          boost::asio::buffer(data, n), boost::asio::use_awaitable);
    }
  }
  catch (const std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }
}

// ...

boost::asio::co_spawn(my_executor,
  echo(std::move(my_tcp_socket)),
  boost::asio::detached);
每次操作的取消

新執行緒的建立使用了僅支援 cancellation_type::terminal 值的取消狀態。要更改取消狀態,請呼叫 this_coro::reset_cancellation_state


PrevUpHomeNext