另一个应用程序使用c ++

时间:2019-06-03 09:32:38

标签: c++ multithreading qt qthread qtimer

我有自己的小框架(下面的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来说一切正常。在哪里可以找到问题的原因?

1 个答案:

答案 0 :(得分:0)

尝试使用此:

  • connection_thread->setPriority(QThread::HighestPriority);

  • connection_thread->setPriority(QThread::TimeCriticalPriority);

使安排的时间更频繁。

  • serial_port->timer->setTimerType(Qt::PreciseTimer)

使您的QTimer成为PriciseTimer类型。

希望它对您有帮助。