Я хочу, чтобы моя программа ожидала тайм-аута QTimer для выполнения определенного метода. Функция выполняет некоторые вычисления в цикле, и после того, как этот цикл завершится, она должна дождаться истечения времени ожидания таймера и запустить его снова после завершения события таймера.
Вот текущее состояние кода, который генерирует поток и соединяет таймер с методом generateData (). Этот код выполняется в конструкторе класса.
timer = new QTimer(0);
timer->setTimerType(Qt::PreciseTimer);
timer->setInterval(40); //25 frames per second
QThread *thread = new QThread(this);
moveToThread(thread);
timer->moveToThread(thread);
connect(thread, SIGNAL(started()), timer, SLOT(start()));
connect(timer, SIGNAL(timeout()), this, SLOT(timerEvent()));
connect(thread, SIGNAL(started()), this, SLOT(generateData()));
connect(this, SIGNAL(finished()), thread, SLOT(quit()));
thread->start();
метод, который должен ждать таймера после выполнения цикла for
void Class::generateData() {
while (1) {
calculation()
//do some calculation, which takes around 3-5ms
QEventLoop loop;
connect(timer, SIGNAL(timeout()), &loop, SLOT(quit()));
loop.exec();
}
}
Кажется, что цикл событий не останавливает выполнение метода в это время.
Есть ли другой способ сделать это?