5

我正在QT中申请。我使用 QExtSerialPort 从我的 comp 的串行端口接收数据(只要发出 readyread() 信号)。我也有一些计时器以一定的时间间隔运行其他事情。现在我注意到,当定时器打开时,不是所有readyread信号的数据都发出了很多,然后定时器没有打开。QT中有没有办法确保串口的所有数据都被接收到?也许通过为readyread事件设置高优先级或类似的东西?

4

1 回答 1

6

信号槽连接和事件系统之间存在差异。信号发射和槽触发不是独立的东西——当信号发出时,连接的槽开始工作。所以它们(信号)不会丢失。

所有事件都通过应用程序发送,也被接收,但它可以稍后发生。当控制返回主事件循环时,将处理存储在队列中的所有事件。

如果您自己发布事件,则可以使用 static void QCoreApplication::postEvent ( QObject* receiver, QEvent* event, int priority );方法。事件按优先级降序排列,即优先级高的事件排在优先级低的事件之前。优先级可以是任何整数值,即介于INT_MAX和INT_MIN之间,包括两个值;有关详细信息,请参阅 Qt::EventPriority。具有相同优先级的事件将按照发布的顺序进行处理。

于 2012-09-05T18:17:42.793 回答