2

我正在制作一个 GUI,其中我在 QStackedWIdget 上有多个表单。现在我希望这些表格中的数据在可用时更新。数据将通过 RTI DDS 接收。有人可以建议我一些从非 GUI 线程更新 GUI 数据的示例或链接。

谢谢你。

4

1 回答 1

2

您有多种选择。根据您的问题,我将解释最适合您情况的那个。

首先,您需要知道在订阅者端,您的应用程序和 DDS 数据读取器之间可能存在三种不同的交互方式:轮询、侦听器和等待集。轮询基本上意味着您的应用程序在认为必要时查询 DataReader,例如以固定速率。使用侦听器意味着您的应用程序为中间件提供了一些回调函数,这些函数在新数据到达时被调用。等待集类似于套接字select,您的应用程序线程在数据到达或发生超时之前被阻塞 - 通常随后是访问 DataReader 的操作。

对于 GUI 应用程序,通常使用轮询机制而不是您可能正在使用的侦听器方法。您可以让 GUI 以固定速率(例如 5 Hz)从 DataReader 读取或获取数据,而不是在数据到达时读取数据并立即更新 GUI 小部件。

使用这种方法,您可以控制访问 DDS 的时间,并且无论数据在 DataReader 中更新的速度有多快,都可以按所需的准确速率进行。此外,您的数据由非 GUI 线程更新的问题已得到解决,因为您可以从自己的上下文中访问 DDS DataReader。

使用轮询的一个潜在缺点可能是小部件的更新会发生一些延迟,例如,如果您以 5 Hz 的频率进行轮询,则最大额外延迟将为 200 毫秒。不过,这对于 GUI 应用程序来说通常不是问题。

于 2013-07-25T01:57:33.967 回答