スタックフルコルーチンはとても便利なんですが、コルーチン内で実行するには都合が悪いコードもあるかなと思います。
そんなとき、表コンテキスト(って言うのだろうか。通常スタックの状態のこと。)で処理をさせて結果を得るっていうことを、同期処理っぽく書くやり方を、忘れる自信があるので備忘録です。
using namespace boost; asio::io_service ioService; asio::spawn( ioService, [&](asio::yield_context yield) { system::error_code ec; asio::handler_type<asio::yield_context,void(system::error_code,int)>::type handler( std::forward<asio::yield_context>(yield[ec]) ); asio::async_result<decltype(handler)> result(handler); ioService.post( [handler]()mutable { int no = 123; // ここは表コンテキストで処理される handler( system::error_code(), no ); }); int r = result.get(); // handler(・・・) が処理されるまで待つ });
Page Info | |
---|---|
Page Name : | 技術系備忘録/C++/Boost/boost.asioコルーチン内で表コンテキストの処理を行う |
Page aliases : | None |
Page owner : | takatsuka |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 4143,
today: 3,
yesterday: 2
Princeps date: 2017-10-25 (Wed) 09:59:24
Last-modified: 2017-10-25 (Wed) 09:59:24 (JST) (2642d) by takatsuka