2011-09-12 13 views
5

私は現在、MicrosoftのConcurrency Runtimeで非同期エージェントライブラリを使用しています。ウィンドウメッセージや、UIスレッドに作業が終了したことを知らせる他の手段を使用して、タスクが終了したことを知らせる明確な方法はまだ見つかりませんでした。非同期エージェントとウィンドウメッセージ

タスクに沿ってウィンドウハンドルとメッセージ値(WM_xxx)を渡し、UIスレッドに信号を送るのにPostMessage()を使用することができます。これは私の意見ではやや醜いもので、エラーの原因です。例外が発生した場合は、私のUIスレッドに信号を送るcatchハンドラを持たなければなりません。これは簡単に忘れられ、例外条件は頻繁に実行されない可能性があるため、それを見つけるのは難しいです。

ドキュメントでは、データをUIスレッドに戻す方法について説明しています。ウィンドウメッセージは使用しませんが、ポーリング手法は使用しません。私は、タスクが終了したとき、利用可能な「割り込み」メソッドがあるときにポーリングするタイマーを設定するのは馬鹿げていることがわかります!

これは、クロスプラットフォームライブラリではないので、これがライブラリに組み込まれていないのは奇妙です。私が理解していることから、WindowsとWindowsのみで動作するように設計されています。

この機能はライブラリで使用できますか、それとも手を加えなければなりませんか?

答えて

1

Windowsのunbounded_bufferを監視し、そのメッセージを適切にディスパッチする機能のみを持つ1つのモニタスレッドを作成できます。あなたのエージェントにこのバッファについて知らせる。