Рабочий процесс: < /strong> < /p>
- неоднократно издает данные (
Код: Выделить всё
Task1
), пока он работает.Код: Выделить всё
task1_data
- получает данные через подключение к очереди (on_task1_data) и обрабатывает их, затем издает обработанные данные (task2_data) обратно в основной (GUI) поток.
Код: Выделить всё
Task2
изящное выключение:
[*]
Код: Выделить всё
Task1
[*]
Код: Выделить всё
Task2
< /ul>
немедленное отключение: < /strong> < /p>
Код: Выделить всё
Task1
[*] Любые необработанные события, предназначенные для Task2 , отбрасываются так, чтобы task2 не продолжает обрабатывать.
[*] Любые сигналы в очереди, уже излучаемые Task2 для основного потока, также игнорируются (поэтому основной поток не тратит время на обработку времени).
Правильно как можно быстрее, не завершая какую -либо работу в очереди. >
Виджет, который запустил эту задачу, разрушается, поэтому мы не можем дождаться завершения обработки. < /li>
Параметры, поэтому нам нужно как можно быстрее остановить обработку старых данных. < /li>
< /ul>
Вот упрощенный пример кода: < /p>
Код: Выделить всё
#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() не продолжает обрабатывать?
Подробнее здесь: [url]https://stackoverflow.com/questions/79423269/how-to-implement-in-qt-graceful-and-immediate-shutdown-for-worker-threads-disca[/url]