机器人的跟踪线程和显示

Robot's Tracker Threads and Display

Application:目的应用程序有一个 tcp 服务器能够处理与机器人的多个连接。 我选择使用数据库/无文件,所以我使用 sqlite 数据库来保存有关机器人及其完整历史、机器人模型、任务等的信息...... 机器人向我们发送了一些数据,如里程计、任务信息等...

我为每个新机器人的连接创建一个线程来处理消息并更新数据库中机器人的信息。现在让我们开始谈谈我的问题:

该应用程序必须实时显示有关机器人的信息,我正在考虑使用 QSqlQueryModel,设置正确的查询并将其显示在 QTableView 上,但后来我遇到了一些问题/解决方案:

问题编号1: QTableView 上显示的信息不在数据库上: 我有数据库的电流消耗和数据库的实际费用容量,但我还想在 table 上显示剩余电池时间,如何在我的 TableView 中添加具有正确行为(数学实现)的列。

问题编号 2:我将每秒接收每个机器人的消息,因此更新数据库和图形用户界面(加载查询)可能不是最佳解决方案当我连接大量机器人时?更新 table 并且每分钟只更新数据库或类似的东西是否更好?如果我使用此方法,我无法使用 table 和 QSqlQueryModel 来更新 tables,那么您推荐我使用的方法是什么?

谢谢 三车Z

  1. 我以前运行遇到过类似的问题;我的结论是 QSqlQueryModel 不是显示目的的最佳选择。您可能希望对查询结果进行一些处理,或者您可能希望根据结果创建、删除、更改显示数据以获得更高级的图形用户界面。我认为最好的办法是实现你自己的委托并覆盖视图相关的方法 - setData, setEditor

这样您就可以控制所有列并直接联合原始数据及其显示等价物(即 EditData、UserData)。

  1. 是的,如果您实时更新视图并且 运行 以较低频率执行批处理以更新大数据会更好。一般app是中间层,db是底层,用于数据监控,除非你在内存共享缓存中使用db。

编辑:重要的一点,你不能运行在多个线程中更新(你可以,但是sqlite会阻塞线程直到它获得锁)所以最好从一个运行更新单线程