Слот QTimer срабатывает несколько раз?

Я создаю приложение для пользовательского интерфейса Raspberry PI для чтения данных с датчика в течение определенного времени (5 секунд). Проблема в том, что интервал ожидания QTimer вызывается несколько раз

{   //at system init
readTempCur = new QTimer(this);
connect(readTempCur, SIGNAL(timeout()), this, SLOT(readSensor()));
readTempCur->start(SAMPLINGTIME);
readSensor();   //added to call on boot itself, can be removed
}
void HomePage::readSensor(void) {
   readTempCur->stop();
   qDebug() << "Read Sensor triggerred at " <<QDateTime::currentDateTime().toString();
   //DO my actions
   readTempCur->start(SAMPLINGTIME);
 }

[править для ответа] Наиболее вероятным случаем для такой проблемы является подключение слота к сигналу, который уже подключен; это вызовет слот 'n' число раз, когда он подключился, проект должен позаботиться о том, чтобы снова не подключаться.

2 ответа

Функция QTimer::start запускает / перезапускает таймер.

Ваш readSensor Функция останавливает таймер и затем перезапускает его снова.

удалить start починить это.

void HomePage::readSensor(void) {
   readTempCur->stop();
   qDebug() << "Read Sensor triggerred at " <<QDateTime::currentDateTime().toString();
   //DO my actions
   //readTempCur->start(SAMPLINGTIME);
 }

PS Если вы хотите запустить таймер один раз, вы можете использовать singleShoot

QTimer::singleShot(SAMPLINGTIME, this, SLOT(readSensor()));

Не останавливайте и не перезапускайте таймер в readSensor(), Просто делать:

void HomePage::readSensor(void)
{
    qDebug() << "Read Sensor triggerred at " <<QDateTime::currentDateTime().toString();
    //DO my actions
}

Также убедитесь, что SAMPLINGTIME дается в миллисекундах. В течение 5 секунд, SAMPLINGTIME должно быть 5000.

Другие вопросы по тегам