2

スレッドで実行される長時間実行タスクがあります。

WinMain()このすべてのコードは、エントリ ポイントとは別のクラスで行われますWorkerClass

タスクの進行状況に応じてプログレス バーを頻繁に更新したいと考えています。

数時間の調査、試行錯誤の後、いくつかの方法に出会いました。


PostMessageA)スレッド内からメイン ウィンドウ プロシージャへのカスタム(問題: いくつかのソースから眉をひそめられる: スレッドはメイン UI に触れてはならない)

B) 一部の関数PostMessageからメイン ウィンドウ プロシージャへのカスタム(問題: スレッド関数はクラスから解放される必要があるため、フリー関数とクラス関数の間でスコープの問題が発生します)WorkerClass

C) ワーカー スレッドがintポインターを更新し、次に UI スレッド タイマーが定期的に UI を更新する(問題: 時間を費やす価値があるか、それとも「やり方が間違っている」か)


議論の多くは、私が興味を持っていない MFC や C# に飛び込んでいます。

私は、3 つの方法すべてで障害に遭遇するところまで来ました。1つを理解するのに良い仕事をするのに数時間かかります-私はそれを間違って学ぶ努力をしたくありません.

どちらを追求する必要がありますか?

4

1 に答える 1

2

FWIW: 私が現在取り組んでいるコード ベースは、メイン スレッドにメッセージを投稿します。

別の方法であり、私が好むのは、オブザーバー パターンです。メインスレッドはワーカーに「サブスクライブ」し、ワーカーが自分自身を更新するたびに、そのオブザーバー (サブスクライブしたすべてのオブジェクト) に通知します。 http://en.wikipedia.org/wiki/Observer_pattern

于 2012-11-22T03:30:54.350 に答える