メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • Magome
  • クラウドベースのMIDIシーケンサ
    音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています。
twitter

スタックフルコルーチンはとても便利なんですが、コルーチン内で実行するには都合が悪いコードもあるかなと思います。
そんなとき、表コンテキスト(って言うのだろうか。通常スタックの状態のこと。)で処理をさせて結果を得るっていうことを、同期処理っぽく書くやり方を、忘れる自信があるので備忘録です。

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(・・・) が処理されるまで待つ

	});

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 808, today: 3, yesterday: 2
Princeps date: 2017-10-25 (Wed) 09:59:24
Last-modified: 2017-10-25 (Wed) 09:59:24 (JST) (630d) by takatsuka