0

Qt でのスレッド化は初めての経験なので、ご容赦ください。

重いコードを定期的に実行するシングルトン「システム」オブジェクトがあります。UI からシステム シングルトンを制御していますが、システムは UI を認識していません。

メインにスレッドを作成し、システムをそのスレッドに移動します。

QThread systemThread;

System::instance()->moveToThread(&systemThread);

systemThread.start();
qApp.exec();

システムの定期的な処理サイクルが完了するまで、UI はハングします。

また、QThread をサブクラス化し、 runメソッドからexecを呼び出すことも試みました。

何が問題なのですか?私は確かに何か間違ったことをしています。

よろしくお願いします

4

3 に答える 3

2

Qt 開発者 wiki のThreads、Events、および QObjectsに関する優れた記事を参照してください。スレッド アフィニティに問題があるようです。QObject::thread() で確認できます。

于 2011-07-04T11:47:32.807 に答える
1

マルチスレッドを実装するときは、Qt 開発者自身からのこのガイドラインに従うことをお勧めします: https://www.qt.io/blog/2010/06/17/youre-doing-it-wrong

それははるかに効果的で無痛です。

于 2011-07-08T15:51:33.163 に答える
0

systemThread.start()はスレッドでメソッドを開始systemThread.run()するため、内部で実装する必要がありますrun()

独自のスレッドを作成するには、サブクラス化QThreadして再実装しrun()ます。

于 2011-07-02T10:21:54.090 に答える