Betrachtet ein Qt-Projekt. Ich habe verschiedene Qthreads definiert, um meine Berechnungen in TimerEvent jeder Klasse durchzuführen und die Ergebnisse in QMainWindow anzuzeigen. (! Klasse A, B und C gleich sind und nur der Inhalt printf()
würde geändert werden)Sync Qthreads auf verschiedenen Endlosschleifen (QTimerEvent)
Hier ist a.h
class A : public QObject
{
Q_OBJECT
public:
explicit A(QObject *parent = 0);
void timerEvent(QTimerEvent *);
private:
int timerId;
};
und A.cpp
ist:
A::A(QObject *parent) :
QObject(parent)
{
timerId = startTimer(1000);
}
void A::timerEvent(QTimerEvent *)
{
printf("A\n");
}
Die main.cpp
ist als folgt:
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 Beachten Sie, dass ich das Layout meiner Klassen nicht ändern kann. Die Frage ist: Wie kann ich meine Qthreads in diesen Situationen synchronisieren? Die Ergebnisse jeder Klasse haben keine Abhängigkeiten, aber ich muss sicher sein, dass alle Ergebnisse in jeder Sekunde und in derselben Reihenfolge verfügbar sind. Zum Beispiel müssen die Ergebnisse immer als A B C B C C A B C ... Vielen Dank!
Wenn Sie sequentielle Verarbeitung möchten, müssen Sie wirklich separate Threads verwenden? – TheDarkKnight
"Ich möchte etwas anderes tun, aber ich kann meinen Code nicht ändern" Mit dieser Einstellung können Sie ziemlich einfach aufgeben :( –
@KubaOber einige Jungs helfen, aber Jungs wie Sie nur stöhnen! Ich kann Ihre Antwort nicht verstehen. – Mogi