私は2つの異なるスレッドを持っています。最初のものはGUI操作を処理する必要があるメインスレッドです。 2番目は関連するtcpポートをリッスンするネットワークスレッドです。彼らはメインスレッドで実行される方法でメソッドを呼び出すネットワークスレッドが必要です。どのように私はメッセージキューのメカニズムを使用せずにこれを達成することができますか?メインスレッドで動作するメソッドを呼び出す
2
A
答えて
3
私はあなたのケースでそれを行う方法は、イベントキューに関数をスケジュールするように他のスレッドに伝えることです。その関数への引数は、送信される関数にバインドされています。ネットワークコードの例について同様
:
int result = doWork();
otherThreadsEventLoop.scheduleFunction(drawResult,result);
すべてのGUIフレームワークとほとんどのネットワークフレームワークは、あなたがそれを行うことができます。
- qtを使用している場合は、QMetaObject :: invokeMethodを使用します。
- gtkを使用している場合は、q_idle_addを使用します。
- boost :: asioを使用している場合は、io_service.postを使用します。
- libeventを使用している場合は、event_base_onceを使用します。
Cのコールバックだけを提供するライブラリの追加パラメータのバインディングが1つの問題かもしれません。私の提案は、あなたがstd ::関数をコールバックに渡せるようにする "ラッパー"関数を書くことです。
2
メインスレッドで実行中のコードに対して、メソッドを呼び出す必要があることを伝える必要があります。これをどのように実装しても、基本的に何らかのメッセージキューがあります。実際の要件をより具体的に把握して、ケースに適したメッセージキューメカニズムを提案する必要があります。
関連する問題
- 1. NSSavePanel runModalメソッドをメインスレッドから呼び出すべきですか?
- 2. 非同期メソッド呼び出し中のメインスレッド終了?
- 3. メソッド内でメソッドを呼び出すruby
- 4. VB.NETで動的メソッド内のメソッドを呼び出す
- 5. ViewModelメソッドを呼び出す
- 6. メソッドを呼び出す
- 7. Pythonメソッドを呼び出す
- 8. Pythonを呼び出すメソッド
- 9. Javaメソッドを呼び出す
- 10. voidメソッドを呼び出す
- 11. メソッドを呼び出すか?
- 12. UITextViewを呼び出す方法addTargetメソッドを呼び出す
- 13. メインスレッドでonStop()が呼び出されています
- 14. 動的メソッドの呼び出し?
- 15. JVMの動的メソッド呼び出しトレースログイン
- 16. Objective-Cの動的メソッド呼び出し
- 17. OOPの動的メソッド呼び出し
- 18. メソッドを呼び出すセレクトボックスを作成する
- 19. 呼び出す静的メソッドを動的に決定する
- 20. Coffeescript:メソッドが呼び出されるクラスのインスタンスを動的に作成する
- 21. コンストラクターでメソッドを呼び出す
- 22. クラスで静的メソッドを呼び出す?
- 23. クラスCでメソッドを呼び出す#
- 24. javaメソッドをJavaScriptコードで呼び出す
- 25. sails.jsコントローラでsuperメソッドを呼び出す
- 26. スーパークラスコンストラクタで抽象メソッドを呼び出す
- 27. メソッドをチェーンで呼び出す
- 28. クラス間で@selectorメソッドを呼び出す
- 29. 別のメソッドでオブジェクトを呼び出す
- 30. HTMLでJavaメソッドを呼び出す
メッセージキューなしで別のスレッド*でイベントを生成する方法と、メッセージキューを使用しない理由は何でしょうか。 – Thanatos
何とかメソッドを呼び出すためにメインスレッドに信号を送る必要があります。あなたがGUI操作をしていないときにGUIスレッドは何をしますか?それは何を待っていますか? –
メインスレッドは3Dグラフィックス更新メソッドを実行します。したがって、ネットワークメッセージがメインスレッドの下で処理されないようにするため、グラフィックスのパフォーマンスを低下させる可能性があります。 – Alican