コールバック関数をスレッドセーフにするにはどうすればよいですか?この関数はUIを更新するために異なるスレッドによって呼び出されます。このコールバック関数には、呼び出し側が満たすHWNDパラメータがあります。この関数はこのHWNDパラメータを使用してGUIを更新します。 HWNDは、コールごとに異なります。スレッドセーフなコールバック関数
このコールバックスレッドを安全にする方法を教えてください。
よろしくお願いいたします。
ジョン
コールバック関数をスレッドセーフにするにはどうすればよいですか?この関数はUIを更新するために異なるスレッドによって呼び出されます。このコールバック関数には、呼び出し側が満たすHWNDパラメータがあります。この関数はこのHWNDパラメータを使用してGUIを更新します。 HWNDは、コールごとに異なります。スレッドセーフなコールバック関数
このコールバックスレッドを安全にする方法を教えてください。
よろしくお願いいたします。
ジョン
私はこのコールバックスレッドセーフにすることができる方法を教えてください。
コールバック関数で状態が必要ない場合は、GUI関数自体がスレッドセーフでない限り、すでにスレッドセーフです(この回答の後半を参照)。
状態が必要な場合は、その状態でミューテックスを組み込み、読み込み/書き込みアクセス中にミューテックスをロックします。
もっと複雑なロックパラダイム(例:マルチリーダ/シングルライタロック)がありますが、GUIではその必要はないでしょう。
(のJava Swingのための真の、私はこれはWin32用の真であるかどうか覚えていないことができます)GUIの他の問題は、GUIの操作は通常、1つの特定のスレッドで実行されなければならないということです。 win32では、これがメッセージの送信と送信(1つのスレッドで処理される)の理由です。
GUI操作を実行する場合はいつでも、GUIスレッドであるかどうかをチェックするか(Win32でその方法を覚えていないか)、PostMessage()を実行して、特定のGUI操作を開始するための呼び出し。