私は現在、MicrosoftのConcurrencyRuntimeで非同期エージェントライブラリを使用しています。ウィンドウメッセージ、または作業が終了したことをUIスレッドに通知するその他の手段を使用して、タスクが終了したことを通知する明確な方法をまだ見つけていません。
ウィンドウハンドルとメッセージ値(WM_xxx
)をタスクに渡し、タスクを使用PostMessage()
してUIスレッドに信号を送ることができることはわかっています。これは私の意見ではやや醜く、エラーの原因です。例外が発生した場合は、UIスレッドに信号を送るcatchハンドラーが必要です。これは簡単に忘れられ、例外条件はあまり頻繁に実行されない可能性があるため、見つけるのは困難です。
ドキュメントでは、データをUIスレッドに戻す方法について説明しています。ウィンドウメッセージは使用しませんが、ポーリング技術を使用します。「割り込み」メソッドが利用可能な場合に、タスクが終了したかどうかをポーリングするタイマーを設定するのはばかげていると思います。
クロスプラットフォームライブラリではないため、これがライブラリに組み込まれていないのは奇妙なことです。私の理解では、Windowsで実行するように設計されており、Windowsのみで実行するように設計されています。
ライブラリで機能を利用できますか、それともこれを手作業でロールする必要がありますか?