【发布时间】:2018-10-11 09:45:27
【问题描述】:
我有一个非常抽象的问题。我正在做一个需要持续设备通信的项目。我正在将多个设备集成到带有触摸屏的外部处理单元上以执行某些方法。 IE。触摸屏上的“开始视频通话”按钮激活继电器,打开显示设备、摄像头设备和麦克风设备等。
另一方面,我也在尝试监控这些设备。他们目前处于什么状态?它们是否启用/禁用?显示设备当前打开的是什么输入?
到目前为止,我已经提出了两种解决方案来防止通信中的瓶颈,我不断轮询(即每两到五秒以保持准确和最新的状态)开启状态和显示设备的输入状态。
- 利用线程,这样我就可以将不同的命令排入队列并异步执行它们。通过异步读取响应,所有通信都应该很好地间隔开,但我会有一条非常“繁忙”的通信线路,这会对处理单元造成影响。
- 在事件的帮助下,显示设备将其状态更改通知处理器。这会减轻通信线路的压力,但我觉得这很容易被打断。如果设备没有正确抛出它的事件(或事件被错过),则监控状态与实际状态不对应。
我很好奇是否有其他方法可以解决这个问题。到目前为止,我倾向于第二个,因为它对处理单元的压力要小得多,我只是觉得我应该建立很多保护措施来防止实际设备状态的不准确表示。
该项目在 .Net 3.5 上以 C# 运行。
【问题讨论】:
-
您好,一般和最抽象的形式,不保证会传递事件。另一方面;我从来没有遇到过不是由于我自己缺乏编程技能而导致的未交付事件。因此,除非您遇到问题,否则选项 2 将是“更好”的方式。顺便说一句:有时您可以通过实现功能来纠正这些状态。例如:用于恢复状态的后退按钮,在转换到下一个状态之前检查当前状态,超时机制。最后提示:尝试实现
statemachine以防止过多的if/else接线。
标签: c# .net multithreading performance