我正在创建一个GUI,我在QStackedWIdget上有多个表单。现在我希望这些表单中的数据在可用时更新。数据将通过RTI DDS收到。有人可以建议我从非GUI线程更新GUI数据的一些示例或链接。
谢谢。
答案 0 :(得分:2)
您可以选择几种方式。我会根据你的问题来评估最适合你情况的那个。
首先,您需要知道在订阅方,您的应用程序与DDS DataReader之间有三种不同的交互方式:轮询,侦听器和等待集。轮询基本上意味着您的应用程序在认为必要时查询DataReader,例如以固定速率查询。使用侦听器意味着您的应用程序为中间件提供了一些回调函数,每当新数据到达时都会调用这些函数。等待集类似于套接字select
,其中应用程序线程被阻塞,直到数据到达或发生超时 - 通常后面是访问DataReader的操作。
对于GUI应用程序,通常使用轮询机制而不是您可能正在使用的侦听器方法。它不是在数据到达时读取数据,而是立即更新GUI小部件,您可以以固定速率(例如5 Hz)读取GUI或从DataReader获取数据。
使用这种方法,您可以控制何时访问DDS,无论数据在DataReader中的更新速度如何,您都可以按照所需的确切速率进行操作。此外,您解决了由非GUI线程更新的数据问题,因为您可以从自己的上下文访问DDS DataReader。
使用轮询的潜在缺点可能是小部件的更新发生了一些延迟,例如,如果以5 Hz进行轮询,则最大额外延迟将为200毫秒。这对于GUI应用程序来说通常不是问题。