スタックフルコルーチンはとても便利なんですが、コルーチン内で実行するには都合が悪いコードもあるかなと思います。
そんなとき、表コンテキスト(って言うのだろうか。通常スタックの状態のこと。)で処理をさせて結果を得るっていうことを、同期処理っぽく書くやり方を、忘れる自信があるので備忘録です。
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(・・・) が処理されるまで待つ
});
| ぺージ情報 | |
|---|---|
| ぺージ名 : | 技術系備忘録/C++/Boost/boost.asioコルーチン内で表コンテキストの処理を行う |
| ページ別名 : | 未設定 |
| ページ作成 : | takatsuka |
| 閲覧可 | |
| グループ : | すべての訪問者 |
| ユーザー : | すべての訪問者 |
| 編集可 | |
| グループ : | なし |
| ユーザー : | なし |
Counter: 4449,
today: 2,
yesterday: 1
初版日時: 2017-10-25 (水) 09:59:24
最終更新: 2017-10-25 (水) 09:59:24 (JST) (2933d) by takatsuka
