Wie kann ich in QT -Anmut und sofortiger Abschaltung für Arbeiter -Threads (Abfindung in die Warteschlange) implementier
Posted: 08 Feb 2025, 15:53
Ich habe zwei Worker -Klassen, Task1 und Task2 , die jeweils in ihrem eigenen QThread ausgeführt werden.
Der Workflow lautet: < /strong> < /p>
[*] emittiert wiederholt Daten () Während es ausgeführt wird.
[*] empfängt Daten über eine Warteschlangeverbindung (on_task1_data) und verarbeitet sie anschließend verarbeitete Daten (Task2_Data) zum Hauptthread (GUI). P> Ich brauche zwei verschiedene Herunterfahren [/b] Szenarien:
Anmutiger Abschaltung:
stellt die Erzeugung neuer Daten nicht mehr (so werden keine neuen Signale emittiert).
[*] beendet die Verarbeitung der Daten, die bereits in der Ereigniswarteschlange angekommen sind. >
< /ul>
Sofortige Abschaltung: < /strong> < /p>
stellt die Erzeugung neuer Daten nicht mehr zu. /> Alle bereits von Task2 für den Hauptdhreop emittierten Signale in der Warteschlange werden ebenfalls ignoriert (so verschwendet der Hauptfaden keine Zeitabwicklung).
Die Aufgaben leiten korrekt so schnell wie möglich, ohne dass in der Warteschlange gearbeitet wird. >
Das Widget, das diese Aufgabe gestartet hat Parameter, daher müssen wir die Verarbeitung der alten Daten so schnell wie möglich einstellen.
Der Workflow lautet: < /strong> < /p>
[*]
Code: Select all
Task1
Code: Select all
task1_data
[*]
Code: Select all
Task2
Anmutiger Abschaltung:
Code: Select all
Task1
[*]
Code: Select all
Task2
< /ul>
Sofortige Abschaltung: < /strong> < /p>
Code: Select all
Task1
Die Aufgaben leiten korrekt so schnell wie möglich, ohne dass in der Warteschlange gearbeitet wird. >
Das Widget, das diese Aufgabe gestartet hat Parameter, daher müssen wir die Verarbeitung der alten Daten so schnell wie möglich einstellen.
Code: Select all
#include
#include
#include
#include
#include
class Task1 : public QObject {
Q_OBJECT
public:
Task1() {}
~Task1() {
qDebug() isInterruptionRequested()) {
emit task1_data(i, QVector(1000000, 1));
qDebug() start();
}
void onStopThread() {
thread1->requestInterruption();
thread2->requestInterruption();
}
void onData(int i, const QVector& data) {
// Update widgets with new data
qDebug() Verarbeitung wird nicht fortgesetzt?