我有自己的小框架(下面的serial_port
),用于通过QSerialPort发送/获取消息。这是我如何从另一个线程开始的方法:
serial_port->moveToThread(connection_thread);
serial_port->serial->moveToThread(connection_thread);
serial_port->timer->moveToThread(connection_thread);
然后我连接信号:
connect(connection_thread, SIGNAL(started()), serial_port, SLOT(start_loop()));
connect(serial_port, SIGNAL(finished()), connection_thread, SLOT(quit()));
connect(connection_thread, SIGNAL(finished()), serial_port, SLOT(deleteLater()));
connect(serial_port, SIGNAL(finished()), connection_thread, SLOT(deleteLater()));
在serial_port
中,QTimer发送超时消息:
connect(timer, SIGNAL(timeout()), this, SLOT(send_message()));
我的问题是在QTimer
之后运行的另一个程序开始工作,该计时器中断了。它发生在大约20%的案例中。问题在于获得timeout()
信号比想象的要快得多。它发生在Windows平台上,但对于Linux来说一切正常。在哪里可以找到问题的原因?
答案 0 :(得分:0)
尝试使用此:
connection_thread->setPriority(QThread::HighestPriority);
或
connection_thread->setPriority(QThread::TimeCriticalPriority);
使安排的时间更频繁。
和
serial_port->timer->setTimerType(Qt::PreciseTimer)
使您的QTimer
成为PriciseTimer
类型。
希望它对您有帮助。