Слот 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.