私は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. Android Picasso:メインスレッドからメソッド呼び出しが発生する
- 3. ActionPerformedからメソッドを呼び出してメインスレッドでメソッドを実行します
- 4. UICollectionViewのメインスレッドを呼び出すdidSelectItemAt
- 5. Obj-Cのメインスレッドからのみ呼び出すメソッドをマークするには?
- 6. 非同期メソッド呼び出し中のメインスレッド終了?
- 7. 他のオブジェクトからメソッドを呼び出すメソッド呼び出し
- 8. メソッド内でメソッドを呼び出すruby
- 9. VB.NETで動的メソッド内のメソッドを呼び出す
- 10. 1回の呼び出しでメソッドを呼び出す
- 11. 各メソッド呼び出しでjQueryがコンストラクタを呼び出す
- 12. Spring AOP @AfterThrowing - メソッドの詳細を呼び出すメソッドの呼び出し(メソッドを呼び出さない)
- 13. ViewModelメソッドを呼び出す
- 14. Pythonメソッドを呼び出す
- 15. メソッドを呼び出すか?
- 16. メソッドを呼び出す、C#
- 17. Javaメソッドを呼び出す
- 18. メソッドを呼び出す
- 19. C#メソッドを呼び出す
- 20. メソッドを呼び出すボタンアクション
- 21. Pythonを呼び出すメソッド
- 22. voidメソッドを呼び出す
- 23. AnchorPointメソッドを呼び出す
- 24. メインスレッドで更新プログラムを呼び出す方法
- 25. UITextViewを呼び出す方法addTargetメソッドを呼び出す
- 26. フラグメントonInfoWindowを呼び出すメソッドを呼び出す
- 27. C#でメソッド/呼び出しを別のメソッドから呼び出す方法は?
- 28. Roslynでメソッド呼び出しアナライザを作成する
- 29. foreachでクリーンコードでメソッドを呼び出す
- 30. メインスレッドでonStop()が呼び出されています
メッセージキューなしで別のスレッド*でイベントを生成する方法と、メッセージキューを使用しない理由は何でしょうか。 – Thanatos
何とかメソッドを呼び出すためにメインスレッドに信号を送る必要があります。あなたがGUI操作をしていないときにGUIスレッドは何をしますか?それは何を待っていますか? –
メインスレッドは3Dグラフィックス更新メソッドを実行します。したがって、ネットワークメッセージがメインスレッドの下で処理されないようにするため、グラフィックスのパフォーマンスを低下させる可能性があります。 – Alican