我正在与qt中的远程设备通信,有时远程设备没有应答。因此,我实现了一个计时器,该计时器应该通知函数readData()
,该函数通常在设备应答时调用:
int timerID;
void stepperMworker::start_timer()
{
this->timerID = startTimer(TIME_OUT);
}
void stepperMworker::readData(QString data)
{
killTimer(this->timerID);
//Process data
}
void stepperMworker::timerEvent(QTimerEvent *event)
{
killTimer(this->timerID);
this->readData(QString::number(-1));
}
这个想法是从外部接收信号中首先调用readData()
,然后停止定时器,或者定时器本身在readData()
毫秒之后发出TIME_OUT
- 函数的信号。外部设备没有响应。不过有时我会收到错误Error: timer id 2 is not valid for object 0x98f270 (stepperMworker, ), timer has not been killed
。如何确定当前timerID
是否无效?
答案 0 :(得分:0)
这看起来像你杀了两次计时器。你是否阻止在获得timerEvent后调用readData?如果您只想禁止警告,可以在killTimer调用之后插入this->timerID = 0
(请参阅文件/qtbase/src/corelib/kernel/qobject.cpp中的函数void QObject::killTimer(int id)
。