И это всё МОЁ
Имеется класс со слотом, выполняющим некоторую работу, по окончанию которой должен испуститься сигнал с результатом:
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?
Если можно, то как? Может какие-то другие решения существуют.