【发布时间】:2013-08-28 11:52:06
【问题描述】:
我真的不确定如何正确解释这一点,但让我试试。我有一个 C++ 程序正在侦听 CAN 总线(车辆通信总线)上的数据。每隔 1 秒,我就会从总线上收到一条新消息,其中包含有关错误消息的诊断信息。消息不是固定长度的,所以消息一次可能包含5个故障,下一次可能包含3个故障。消息来自两个(或多个)不同的来源,每个来源每 1 秒发送一次。在我的 UI 中,我需要以每 5 秒 1 次的速度循环显示活动故障列表。
这是我的问题。如何有效地使用最新信息更新列表?添加到列表中没有问题,但是如何删除不应再出现在列表中的项目?换句话说,如果我在消息中只收到 3 个错误,这意味着其中 2 个不再存在。我唯一能想到的是使用时间戳和一堆 for 循环来比较 2 条消息并添加/删除/更新列表。对于这类事情,是否已经存在更有效的方法?
编辑:为了澄清,我需要从列表中删除项目,因为这些故障不再有效。如果我有一个数组如下:
// Message that is received: (psudo code)
Fault newFaults1[5] { Fault1, Fault2, Fault3, Fault4, Fault5 };
Fault newFaults2[7] { Fault1, Fault2, Fault3, Fault4, Fault5, Fault6, Fault7 };
// Populate the array that holds both array values
for (int i = 0; i < newFaults1.Count(); i++)
Faults[i] = newFaults1[i];
for (int i = 0; i < newFaults2.Count(); i++)
Faults[i + newFaults1.Count()] = newFaults2[i];
// Now, the next time a message is received, there are fewer faults.
Fault newFaults1[2] { Fault1, Fault2 };
Fault newFaults2[1] { Fault1 };
// TODO: How do I remove all of the old items in the Faults array?
【问题讨论】:
-
听起来是个有趣的问题,但我不明白从列表中删除项目的标准。你的解释不是很清楚。
-
如果一条消息被添加然后快速删除(在 5 秒内),它是否还应该至少显示一次?
-
确实,标准不明确。另外,您说其中 2 个不再存在;是不是因为你收到新的时清单里有 5 件?
-
@john:我编辑了我的问题以添加更多细节。这有意义吗?
-
@ilent2:不,如果它发生得那么快就不需要显示。另外,我更新了我的问题以澄清一些事情。