5

Qt アプリケーション コードClass Aには、 のようなメンバー メソッドが 1 つありmethod1()ます。このメソッドを別のメンバー関数で呼び出して、別のスレッドmethod2()で実行したいと考えています。mehtod1()しかし、qtのドキュメントから見つけたのは次のとおりです。

  1. class MyThreadから新しい (仮定)を継承しQThreadます。
  2. 関数メソッドrun()を必要なコードでオーバーライドします。
  3. MyThreadinのオブジェクトを作成し、Class A必要な場所で run 関数を呼び出します。

しかし、上記は少し複雑に思えます。Qt に新しいQThread(継承せずに) を即座に作成し、このスレッドでmethod1()実行して、実行が終了した後method2()に戻ることができるメカニズムはありますか?method1()

私の質問が明確でない場合はお知らせください。

4

2 に答える 2

10

はい、あなたが望むような方法があります。

この記事は、QThreadから継承する正しい方法ではない理由を理解するのに役立ちます:https ://www.qt.io/blog/2010/06/17/youre-doing-it-wrong

この記事は、QThreadを本当に簡単な方法で使用する方法を知るのに役立ちます:https ://www.qt.io/blog/2006/12/04/threading-without-the-headache

于 2010-12-22T08:33:10.207 に答える
3

スレッドと組み合わせて、QObject スロットとシグナルまたはイベント サポートを使用できます。

基本的に、シグナル/スロットメカニズムを介して呼び出された QObject のスロットは、QObject を作成したスレッドで実行されます。QObject::moveToThread を使用して、オブジェクトの所有権をあるスレッドから別のスレッドに移動することもできます。

QCoreApplication::postEvent を使用して、オブジェクトが作成されたスレッドで実行するイベントをポストすることもできます。

スレッドと QObjects の詳細については、Qt のドキュメントを参照してください (インデックスの「スレッドと QObjects」トピック)。

あなたの問題に行くと、異なるスレッドで2つの別々のオブジェクトを使用して実行を「広げる」ことができます。

于 2010-12-22T06:36:54.273 に答える