这两天用QT做一个上位机,涉及到有一个数据发送完后需要用到延时,我一开始使用了线程休眠的方式进行延时:
//发送读取指令
if (serialport->write(data) == -1) {
qDebug() << "发送失败!";
}
QThread::msleep(1000);
serialport->clear();
然后我发现data并没有被发送出去,随后排查发现在data数据进入串口发送缓冲区后,调用线程休眠,数据并没有及时发送,而是等待线程唤醒后再发送数据。然而我们唤醒线程后立即执行了clear(),这时休眠前的数据还没发出去就被清理掉了,导致数据丢失。
正确的方式还是使用定时器,以下是我定义的一个定时器延时函数:
//延时函数 void MainWindow::sleep( int msec) { QTime dieTime = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); }
标签:QT,IO,QTime,线程,延时,串口,data From: https://www.cnblogs.com/hw-blog/p/17386568.html