设置事件优先级

Fra*_*ank 3 qt serial-port priority-queue

我正在QT中进行申请。我使用QExtSerialPort从我的comp的串行端口接收数据(无论何时发出readyread()信号)。我也有一些计时器以一定的间隔运行其他事情。现在我注意到,当定时器打开时,不是当定时器未打开时,并非readyread信号的所有数据都少很多。QT中是否有一种方法可以确保已接收到串行端口的所有数据?也许通过将readyread事件设置为高优先级或诸如此类?

Pie*_*esu 5

信号插槽连接和事件系统之间存在差异。信号发射和插槽触发不是分开的东西-发射信号时,连接的插槽开始工作。因此,它们(信号)不会丢失。

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

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

  • 如果信号是从与接收对象不同的线程发出的,则为默认值,该信号将排队,表现为Qt :: QueuedConnection和事件。否则,将以Qt :: DirectConnection的形式直接调用该插槽。只有连接可以排队,不能发出信号。所以你在这里没错 (2认同)