检查qt

时间:2015-12-11 13:45:59

标签: c++ qt timer

我正在与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是否无效?

1 个答案:

答案 0 :(得分:0)

这看起来像你杀了两次计时器。你是否阻止在获得timerEvent后调用readData?如果您只想禁止警告,可以在killTimer调用之后插入this->timerID = 0(请参阅文件/qtbase/src/corelib/kernel/qobject.cpp中的函数void QObject::killTimer(int id)