0

我正在使用(Qt)创建一个用户界面,并将其附加到我的 C/C++ 运动应用程序,使用共享内存作为我的进程间通信形式。

我目前有一个类,我在我的运动应用程序中创建了一个有很多成员的类。这些成员中的大多数用于更新 UI 上的数据,其中一些成员每秒更新约 20 到 50 次,因此速度非常快(原因是因为它正在跟踪运动)。我的问题是 UI 上的数据没有经常更新。它每隔几秒钟更新一次。通过使用“volatile”,我能够使用我的应用程序的结构中的其他变量使其工作,但它似乎不适用于我的班级成员。我知道问题不在于 UI (Qt) 方面,因为我看到我的应用程序中没有更新实际的成员数据,即使我每个周期都有命令来更新数据。

我很确定问题是发生了一些优化,因为我没有像在我的结构中那样将我的成员声明为 volatile,但是当我使它们成为 volatile 时,它​​仍然不起作用。我发现,当我通过在我的运动应用程序中更新我的运动数据的函数中打印出评论时,UI 更新得更频繁,好像打印出评论的命令阻止了编译器优化某些东西。

有没有人遇到过这个问题或有可能的解决方案?

非常感谢您的帮助。提前谢谢!

编辑:界面没有完全冻结。我只是每隔几秒钟更新一次,而不是像我打算的那样连续更新。使用各种测试我知道问题不在于 GUI 或共享内存方面。问题完全出在运动应用方面。我正在调用的函数如下: int

`motionUpdate(MOTION_STAT * stat)
{
positionUpdate(&stat->traj);
} 
`

在哪里

positionUpdate(){stat->Position = motStatus.pos_fb;}

Position 是一个包含 x、y 和 z 的类成员。除非我在 positionUpdate() 之前打印出注释,否则该函数似乎不会更新位置值。我不会跟踪共享内存的变化来更新 UI,而是每个周期都更新 UI。

4

1 回答 1

0

特别是鉴于您使用的是 Qt,我强烈建议您不要使用“本机”共享内存,而是使用信号。使用消息传递的并发性(信号/插槽就是这样一种方式)比尝试共享内存更容易推理和调试。

我希望您的更新问题是 UI 没有被足够的时间调用,因此有积压的更新要做。

如果更新发生的时间间隔小于 0.3 秒,请尝试添加一些代码,看看是否有帮助。您可能希望调整该数字,但从较大的一端开始。

其次,确保您的应用程序中没有任何“notspots”,其中 GUI 线程没有机会运行。如果有,请考虑将代码放入另一个线程,或者在该部分代码中调用 processEvents()。

如果上述情况确实不是发生的事情,我建议添加有关程序体系结构的更多信息。

于 2013-06-16T13:32:06.930 回答