2017-11-22 5 views
1

私は、ワーカースレッドがメインスレッド上でメソッドを呼び出す必要があるアプリケーションを持っています。 私はwin32api.PostThreadMessage(メッセージWM_USER + X)を介してカスタムメッセージを送信する予定であり、このメッセージが受信されると、いくつかの関数がメインスレッドで実行される必要があります。私が探しているのは、対応するWM_USER_Xメッセージにメソッドを登録することです。MultiThreading:Windows上のカスタムメッセージに対応するメインスレッドにメソッドを登録できますか?

+1

これは物事の仕組みではありません。メッセージにメソッドを登録しません。スレッドにメッセージを投稿する場合は、メインアプリケーションのメッセージループ(および実行されるすべてのモーダルメッセージループ)を変更する必要があります。本当にメインスレッドに直接投稿するのは非常に悪い考えです。ウィンドウに投稿する方がいいです。次に、そのウィンドウのウィンドウプロシージャでメッセージを処理する必要があります。 –

+2

「[なぜPostThreadMessageによってポストされたメッセージが消えるのですか?」](https://blogs.msdn.microsoft.com/oldnewthing/20090930-00/?p=16553)慣用的な方法は、メインスレッドからワーカースレッドにウィンドウハンドルを渡すことです。ワーカースレッドは、このウィンドウハンドルを指定する通常の 'PostMessage()'を行います。 – zett42

+0

@DavidHeffernan、カスタムメッセージでウィンドウを作成し、https://www.programcreek.com/python/example/53218/win32con.WM_USER経由でメッセージを処理する方法を見てきました。ここでメッセージマップを作成します(参考例2) しかし、ウィンドウを作成したくない場合はどうすればいいですか? – Shady23

答えて

-1

RegisterWindowMessage関数を見てください。それはあなたの後ろのものとほとんど同じです(他のものと衝突してはならないメッセージ番号を提供します)。 1つの欠点は、メッセージ番号が定数ではなく、プログラムの実行ごとに異なることです。これはメッセージループをいくらか複雑にしますが、この種の事柄では十分に価値があります。

+0

質問は、メッセージに応答するコードを接続する方法です。メッセージIDを取得する方法ではありません。 –

関連する問題