表示: Delphi
C++
表示設定
Windows のメッセージキューを使ってメッセージを送信する
提供:RAD Studio XE2
メッセージ処理:インデックス への移動
マルチスレッドアプリケーションでは,実行中のスレッドに目的のコントロールが存在するわけではないので,Perform メソッドを呼び出すことはできません。しかし,Windows メッセージキューを使用すると,実行されていないスレッドと安全に通信できます。メッセージ処理は常にメインの VCL スレッドで発生しますが,Windows メッセージキューを使用するとアプリケーションの任意のスレッドからメッセージを送信できます。SendMessage の呼び出しは同期的です。つまり,SendMessage は目的のコントロールが別のスレッドにある場合でも,そのコントロールがメッセージを処理するまでは応答がありません。
Windows API 呼び出し SendMessage を使用すると,Windows メッセージキューを使ってコントロールにメッセージを送信できます。SendMessage では,Perform メソッドと同じパラメータをとりますが,Window ハンドルを渡すことによって目的のコントロールを識別する必要があります。したがって,次のコードのかわりに,
MsgResult := TargetControl.Perform(MY_MYMESSAGE, 0, 0);
MsgResult = TargetControl->Perform(MY_MYMESSAGE, 0, 0);
次のコードを記述します。
MsgResult := SendMessage(TargetControl.Handle, MYMESSAGE, 0, 0);
MsgResult = SendMessage(TargetControl->Handle, MYMESSAGE, 0, 0);
SendMessage の詳細は,Microsoft MSDN のマニュアルを参照してください。同時に実行できる複数のスレッドを記述する方法については,「スレッドの調整」を参照してください。