我正在使用(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。