C++ 数据的实时显示

C++ 数据的实时显示,c++,qt,software-design,architecture,C++,Qt,Software Design,Architecture,我正在设计一个应用程序来收集我的车辆数据并将其显示在应用程序上。我正试图找出我的软件最好的架构是什么。我计划在我的gui QPainter中使用Qt,并且我有从传感器收集数据的自定义硬件。我原以为硬件I/O将驻留在应用程序中,该应用程序在自己的线程中呈现图形,但现在我认为最好将所有硬件I/O通信放在一个单独的进程中,并使用一些IPC协议在两个进程之间进行通信,不确定是哪一个进程 你们推荐我做什么。这也是我第一次编写多进程应用程序。我已经编写了数百次了。到目前为止,最好的解决方案是将专用硬件分成两

我正在设计一个应用程序来收集我的车辆数据并将其显示在应用程序上。我正试图找出我的软件最好的架构是什么。我计划在我的gui QPainter中使用Qt,并且我有从传感器收集数据的自定义硬件。我原以为硬件I/O将驻留在应用程序中,该应用程序在自己的线程中呈现图形,但现在我认为最好将所有硬件I/O通信放在一个单独的进程中,并使用一些IPC协议在两个进程之间进行通信,不确定是哪一个进程


你们推荐我做什么。这也是我第一次编写多进程应用程序。

我已经编写了数百次了。到目前为止,最好的解决方案是将专用硬件分成两个线程或任务:

做任何需要的实时操作的人 另一个用于响应UI中的数据查询和命令 这两个线程相互协作,以维护一致的、受信号量保护的共享变量空间。第二个线程在锁定共享空间之前执行所有解析等操作,复制它需要的任何内容,然后解锁。目标是将锁定间隔限制在尽可能短的时间内。通常,将所有共享变量安排到一个结构中并使用大容量memcpy是可行的,即使只有少数成员感兴趣。这种交互越简单越好

用户界面包含

当屏幕可见且处于活动状态时,会导致对数据模块进行定期查询的屏幕
其他体系结构是可能的,但每当我看到它们时,它们都会演变成大量的补丁来解决同步和计时问题。

,或者足够快/互动以至于人们不会在意/注意到?我希望它足够快,以便我能注意到数据中的任何延迟。尝试用这个应用程序替换我的项目车的仪表盘。这几乎从来都不是一个错误。引爆昂贵火箭的最佳方法是将其放入线程Gui和硬件中分离线程,还是将它们拆分为单独的进程更好。是否有一个或另一个优势。如果进程崩溃,另一个可以重新启动它。取决于平台。例如,使用MicrosoftWindows,我会在单个进程中使用线程,因为它在进程间通信方面存在弱点。使用Linux,无论哪种方式,只要你觉得更自然就可以。好吧,我计划使用Minimal Ubuntu作为我的操作系统,因为它重量轻。希望这将有助于提高应用程序的实时性。