2010-12-12 16 views
0

コールバック関数をスレッドセーフにするにはどうすればよいですか?この関数はUIを更新するために異なるスレッドによって呼び出されます。このコールバック関数には、呼び出し側が満たすHWNDパラメータがあります。この関数はこのHWNDパラメータを使用してGUIを更新します。 HWNDは、コールごとに異なります。スレッドセーフなコールバック関数

このコールバックスレッドを安全にする方法を教えてください。

よろしくお願いいたします。

ジョン

答えて

2

私はこのコールバックスレッドセーフにすることができる方法を教えてください。

コールバック関数で状態が必要ない場合は、GUI関数自体がスレッドセーフでない限り、すでにスレッドセーフです(この回答の後半を参照)。

状態が必要な場合は、その状態でミューテックスを組み込み、読み込み/書き込みアクセス中にミューテックスをロックします。

もっと複雑なロックパラダイム(例:マルチリーダ/シングルライタロック)がありますが、GUIではその必要はないでしょう。


(のJava Swingのための真の、私はこれはWin32用の真であるかどうか覚えていないことができます)GUIの他の問題は、GUIの操作は通常、1つの特定のスレッドで実行されなければならないということです。 win32では、これがメッセージの送信と送信(1つのスレッドで処理される)の理由です。

GUI操作を実行する場合はいつでも、GUIスレッドであるかどうかをチェックするか(Win32でその方法を覚えていないか)、PostMessage()を実行して、特定のGUI操作を開始するための呼び出し。

関連する問題