Windows のメッセージ キューを使用したメッセージの送信

提供: RAD Studio
移動先: 案内検索

メッセージの送信 への移動


マルチスレッド アプリケーションでは、目的のコントロールが実行中のスレッド以外のスレッドに存在するので、ただ Perform メソッドを呼び出すというわけにはいきません。 しかし、Windows メッセージ キューを使用すると、他のスレッドと安全に通信できます。 メッセージ処理は常にメインの VCL スレッドで行われますが、Windows メッセージ キューを使用すると、アプリケーション内の任意のスレッドからメッセージを送信できます。 SendMessage の呼び出しは同期的です。 つまり、SendMessage は、目的のコントロールがたとえ別のスレッドにある場合でも、そのコントロールがメッセージを処理し終わるまでは制御を返しません。

Windows API 呼び出しである SendMessage を使用すると、Windows メッセージ キューを使ってコントロールにメッセージを送信できます。SendMessage では、Windows ハンドルを渡すことで目的のコントロールを特定する必要があることを除けば、Perform メソッドと同じパラメータを取ります。そのため、たとえば、次のようにコーディングするのではなく、

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 のドキュメントを参照してください。同時に実行できる複数スレッドのコーディングの詳細については、「スレッドの調整」を参照してください。

関連項目