Как реализовать в QT изящном и немедленном отключении для рабочих потоков (отбрасывая сигналы в очереди)?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать в QT изящном и немедленном отключении для рабочих потоков (отбрасывая сигналы в очереди)?

Сообщение Anonymous »

У меня есть два работника класса, task1 и task2 , каждый из которых работает в своем собственном qthread .
Рабочий процесс: < /strong> < /p>
  • неоднократно издает данные (

    Код: Выделить всё

    task1_data
    ), пока он работает.
  • получает данные через подключение к очереди (on_task1_data) и обрабатывает их, затем издает обработанные данные (task2_data) обратно в основной (GUI) поток.
мне нужно два разных сценария [/b]:
изящное выключение:

[*] прекращает создание новых данных (так что новые сигналы не испускаются).
[*] завершает обработку данных, которые уже прибыли в очередь событий. >
< /ul>
немедленное отключение: < /strong> < /p>
прекращает создавать новые данные.
[*] Любые необработанные события, предназначенные для 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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»