Qtプロジェクトを検討する。私は、各クラスのtimerEventで計算を行い、QMainWindowで結果を表示するために、異なるQthreadを定義しました。ここで(!クラスA、BおよびCは同一であり、printf()
のコンテンツのみが変更されることになる)異なる無限ループ(QTimerEvent)でQthreadを同期する
はa.h
class A : public QObject
{
Q_OBJECT
public:
explicit A(QObject *parent = 0);
void timerEvent(QTimerEvent *);
private:
int timerId;
};
とA.cpp
ある:
A::A(QObject *parent) :
QObject(parent)
{
timerId = startTimer(1000);
}
void A::timerEvent(QTimerEvent *)
{
printf("A\n");
}
main.cpp
の通りであります以下:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread thread_1, thread_2, thread_3;
A objA;
B objB;
C objC;
objA.moveToThread(&thread_1);
objB.moveToThread(&thread_2);
objC.moveToThread(&thread_3);
thread_1.start();
thread_2.start();
thread_3.start();
return a.exec();
}
plクラスのレイアウトを変更することはできません。問題は、このような状況でQthreadをどのように同期させるのですか?各クラスの結果は依存関係がありませんが、すべての結果が1秒ごとに同じ順序で使用できることを確認する必要があります。たとえば、結果は常にA B C A B C A B C ...と表示されなければなりません。ありがとうございます!
逐次処理が必要な場合は、本当に別のスレッドを使用する必要がありますか? – TheDarkKnight
"私は他の何かをしたいが、自分のコードを変更することはできません"その態度であなたはほんのちょうどあきらめることができます:( –
@KubaOber何人かの人が助けてくれるのですが、 – Mogi