メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • 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(・・・) が処理されるまで待つ

	});

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 38, today: 1, yesterday: 1
初版日時: 2017-10-25 (水) 09:59:24
最終更新: 2017-10-25 (水) 09:59:24 (JST) (47d) by takatsuka