背景
当前 RadarApp::update_connection_status 会在每次 egui 刷新时无条件将状态设置为“已连接”并递增 data_count。这使 UI 的包计数、最后活动时间和 Rerun 帧序列反映的是 UI 刷新频率,而不是真实的串口/ZMQ 数据到达。
该问题在本次 SharedData 数据链路迁移中确认有效,但应通过全局共享计数器解决,不在 src/app/connection.rs 单独维护。
需要修改
- 在
SharedData 或与其绑定的共享状态中维护全局的数据到达版本号和/或最后更新时间戳。
- 由实际写入数据的串口解析端与 ZMQ 订阅端,在成功更新
SharedData 后推进该指标。
RadarApp::update_connection_status 仅在指标发生变化时:
- 标记为已连接;
- 更新 UI 展示的包/数据计数;
- 刷新“Last live”时间;
- 使用数据版本设置 Rerun 帧序列并调用日志记录。
- 指标在既有超时窗口内未更新时,将连接状态回退为未连接。
- 避免将 egui 的约 100ms 重绘周期计入数据包数量或当作数据版本。
影响范围
src/shared_data.rs
src/serial/serial_parser.rs
src/zmq/zmq.rs
src/app/connection.rs
- 相关状态/UI 展示及 Rerun 调用点
验收标准
- 空闲或断流时,包计数不随 UI 重绘增长,连接状态会在超时后显示为未连接。
- 每次实际成功写入共享数据时,全局版本号或更新时间会更新。
- 有新数据时,UI 的包计数和最后活动时间更新,Rerun 帧序列使用数据版本而不是 UI 帧号。
- 实现不引入
Arc<Mutex<...>> 嵌套持锁或死锁风险。
关联
背景
当前
RadarApp::update_connection_status会在每次 egui 刷新时无条件将状态设置为“已连接”并递增data_count。这使 UI 的包计数、最后活动时间和 Rerun 帧序列反映的是 UI 刷新频率,而不是真实的串口/ZMQ 数据到达。该问题在本次 SharedData 数据链路迁移中确认有效,但应通过全局共享计数器解决,不在
src/app/connection.rs单独维护。需要修改
SharedData或与其绑定的共享状态中维护全局的数据到达版本号和/或最后更新时间戳。SharedData后推进该指标。RadarApp::update_connection_status仅在指标发生变化时:影响范围
src/shared_data.rssrc/serial/serial_parser.rssrc/zmq/zmq.rssrc/app/connection.rs验收标准
Arc<Mutex<...>>嵌套持锁或死锁风险。关联