表示: 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 のマニュアルを参照してください。同時に実行できる複数のスレッドを記述する方法については,「スレッドの調整」を参照してください。

関連項目

以前のバージョン
他言語版