私は、ワーカースレッドがメインスレッド上でメソッドを呼び出す必要があるアプリケーションを持っています。 私はwin32api.PostThreadMessage(メッセージWM_USER + X)を介してカスタムメッセージを送信する予定であり、このメッセージが受信されると、いくつかの関数がメインスレッドで実行される必要があります。私が探しているのは、対応するWM_USER_Xメッセージにメソッドを登録することです。MultiThreading:Windows上のカスタムメッセージに対応するメインスレッドにメソッドを登録できますか?
1
A
答えて
-1
RegisterWindowMessage関数を見てください。それはあなたの後ろのものとほとんど同じです(他のものと衝突してはならないメッセージ番号を提供します)。 1つの欠点は、メッセージ番号が定数ではなく、プログラムの実行ごとに異なることです。これはメッセージループをいくらか複雑にしますが、この種の事柄では十分に価値があります。
+0
質問は、メッセージに応答するコードを接続する方法です。メッセージIDを取得する方法ではありません。 –
関連する問題
- 1. ブラックベリーにプッシュサービス用のプッシュ対応アプリケーションを登録します
- 2. サーバー上のSQLメンバーシップにユーザーを登録できませんか?
- 3. CXF OSGiバンドル - CXFServletに対するフィルタを登録しますか?
- 4. サービス遅延応答フィルタをweb.config内に登録できますか?
- 5. Dockerサービスを登録者に登録できません
- 6. メソッドGETに一致する2つのルートを登録できません
- 7. 城ウィンザーオート複数のインタフェースの登録とそれに対応する実装
- 8. Firebase通知に登録されているすべてのユーザの登録トークンにアクセスできますか?
- 9. データベースに登録する登録フォームPHP
- 10. ホスト上のハブにVM上のSelenium webdriverノードを登録できません
- 11. Spring Boot 2.0.0.M2の@BeanメソッドでRouterFunctionを登録するには?
- 12. JQuery Mobileでドロップダウンメニューの登録アクションを登録するには?
- 13. POSTメソッド(安静)に対する応答を取得できますか?
- 14. facebook/twitterユーザーはすぐにwordpressに登録できますか?
- 15. 別のスレッドからメインスレッドでメソッドを実行できますか?
- 16. 特定の信号用のシグナルハンドラの登録は、別の登録済み信号を上書きしますか?
- 17. アンドロイドからサーバーに値を登録できますが、JSonの応答を取得できません。
- 18. gmail-addonsマニフェストのサブドメインをホワイトリストに登録できますか?
- 19. 自分のTransactionScopeにNServiceBus Publishを登録できますか?
- 20. 複数のHttpSessionListenerオーバーライドをTomcat 8に登録できますか?
- 21. uikitメソッドはメインスレッド上で実行されますか?
- 22. Googleでは.cshtml(Razor)をインデックスに登録できますか?
- 23. Laravel 5.5:登録前にメソッドを実行
- 24. すでに登録されているユーザー名を登録することができます。
- 25. 登録ポストメソッド上 - java.lang.IllegalArgumentException
- 26. Javaのjava.util.Arrays.toString(...)メソッドに対応する.NET
- 27. リフレッシュ時にC2DM登録IDを取得できますか?
- 28. スプラッシュ画面にC2DM(プッシュ通知)を登録できますか?
- 29. Django登録 - ログイン後にログイン/登録からリダイレクトする
- 30. 登録解除後にユーザーをMailChimpリストに登録する
これは物事の仕組みではありません。メッセージにメソッドを登録しません。スレッドにメッセージを投稿する場合は、メインアプリケーションのメッセージループ(および実行されるすべてのモーダルメッセージループ)を変更する必要があります。本当にメインスレッドに直接投稿するのは非常に悪い考えです。ウィンドウに投稿する方がいいです。次に、そのウィンドウのウィンドウプロシージャでメッセージを処理する必要があります。 –
「[なぜPostThreadMessageによってポストされたメッセージが消えるのですか?」](https://blogs.msdn.microsoft.com/oldnewthing/20090930-00/?p=16553)慣用的な方法は、メインスレッドからワーカースレッドにウィンドウハンドルを渡すことです。ワーカースレッドは、このウィンドウハンドルを指定する通常の 'PostMessage()'を行います。 – zett42
@DavidHeffernan、カスタムメッセージでウィンドウを作成し、https://www.programcreek.com/python/example/53218/win32con.WM_USER経由でメッセージを処理する方法を見てきました。ここでメッセージマップを作成します(参考例2) しかし、ウィンドウを作成したくない場合はどうすればいいですか? – Shady23