2016-09-05 28 views

答えて

0

task::is_doneは、タスクが行われているかどうかをテストするための正しい方法ですが、私はそれを使用していないお勧めします。 is_doneがfalseを返した場合、あなたがその事実を実行し始める頃には、タスクはすでに完了している可能性があります。この関数はおそらくプログラムを遅くするかもしれない何らかの同期を必要としていることは言うまでもなく、非常にレイシーです。

代わりに、連鎖を連鎖するか、co_awaitを使用してください。完了したタスクをそこで処理します。

+0

非同期API(XboxLive)を同期コードで使用しています(これについては何もできません)。これは、新しい操作を開始する前に以前の操作が完了したかどうかをテストする関数の一部です。私は基本的に並行性のRTについて知りませんでした(私はそれについて私が読んでいる)私の最初の解決策は、非同期操作が開始される前に変数を設定し、変数をfalseに設定することでした。 – Zingam

+0

@ジンガム悪い考え。それらが完了しているかどうか尋ねるのではなく、これらのタスクを連鎖させる –

+0

どうすればいいですか?私はインターフェイス(仮想関数)getInfoAsync()、isAsyncComplete()、getRangeAsync()を実装しています。その場合の非同期は、これらのタスクが別のスレッドで実行されていることを意味します。それらはトリガーシステムによって呼び出されます。これらのインタフェースは、いくつかの異なるプラットフォームと異なるAPI用にすでに実装されています。とにかく私はあなたのアドバイスを心に留めておきます。 – Zingam

関連する問題