0

我正在使用 C 和 ncurses 库编写应用程序。我的程序正在与一些传感器密集交换数据(发送和接收一些数据)。有许多传感器(最多 500 个)。现在我想以“用户友好”的方式显示每个传感器的信息:它必须是一个带有项目的可滚动列表,用户可以选择每个项目。我现在最好的主意是使用 ncurses '菜单库'。步骤如下:

  1. 创建项目列表(实际上是一些字符串数组,其中每个字符串包含传感器编号、类型和其他信息。
  2. 创建菜单并将这些项目添加到菜单
  3. 显示菜单

听起来可能不错,但问题是每个传感器的信息(实际状态)是动态更新的。好的,我可以实现一些“热键”来更新信息,但这可能非常耗时:重建和重新显示所有项目不是一个好主意。那么你会怎么做呢?

4

1 回答 1

0

您基本上拥有数据源的视图,并且数据源正在更新和修改,您需要向查看者发出信号,告知特定数据项已被修改,以便查看者可以更新其视图。

通常,我在这种情况下所做的是拥有一个事件路径,以便当查看器、数据的消费者和生产者、您的传感器线程之间共享的数据源时,共享数据被更新,然后事件消息被发送到查看器。

事件消息通常使用某种 FIFO 排队机制发送,以便查看者按照生产者发送事件的顺序接收事件。

对于诸如 Windows 之类的事件驱动窗口系统,通常有一个PostMessage()函数允许您将消息发布到特定窗口或特定线程。

因此,基本的窗口设计是接受具有指示源数据已更新的消息标识符以及一些标识符或索引以指示哪些项目已更新的消息。然后查看器将访问存储区域以从该区域中提取该特定数据项,然后使用该数据更新视图中的特定项文本。

这几乎是标准的MVC 模式。令人讨厌的一点是您如何将源数据更新事件传达给查看器。

于 2012-08-14T19:18:23.643 回答