Имеется класс со слотом, выполняющим некоторую работу, по окончанию которой должен испуститься сигнал с результатом:

class Worker : public QObject
{
Q_OBJECT
public:
// ...
bool isWorking();

signals:
void resultReady(int);

public slots:
void doWork() {
{
QMutexLocker locker(&isWorkingLock_);
isWorking_ = true;
}
// ...
emit resulReady(res);
{
QMutexLocker locker(&isWorkingLock_);
isWorking_ = false;
}
}

private:
bool isWorking_ {false};
QMutex isWorkingLock_;
};

worker_ типа Worker прикреплен к потоку и запускает работу doWork() по таймеру:

    workerThread_.setPriority(QThread::LowestPriority);
worker_->moveToThread(&workerThread_);
connect(workerTimer_, &QTimer::timeout, worker_, &Worker::doWork);

Остановка worker_ выполняется путем остановки таймера. Но, после выключения таймера некоторое время dT работа doWork() продолжается (похоже, что извлекаются сигналы, накопленные в events queue).

Как снизить время dT до нуля. Можно ли реализовать в рамках С++/Qt какую-то из идей:

1. сигнал timeout испускать при условии, что worker_.isWorking() вернул false?

2. очистить events queue?

Если можно, то как? Может какие-то другие решения существуют.








 ,






URL записи