精确计时重复,同步过程的最佳做法?

问题描述 投票:0回答:1

我的主要工作重点是集成各种硬件以形成用于工业自动化的连续状态机。通常,这些应用程序需要以规则且准确的频率(<60Hz)“无限期”循环同步操作的工作流。]

作为一名自学成才的开发人员,到目前为止,我已经采用了两种技术,但我都认为这两种方法都不对:

1。延迟专用线程

无论是BackgroundWorker还是等效的,以伪形式:

  1. 将所需的period定义为频率的倒数。
  2. 运行进程,以System.Diagnostics.Stopwatch或同等时间。
  3. 将正在运行的线程延迟period - elapsed。注意:elapsed可能不一致,但始终小于period
  4. 循环
  5. 原因,我不喜欢这样:

  1. 线程延迟...偏斜。
  2. 维护计时器感觉管理过度,而且麻烦。
  3. 2。 System.Timers.Timer.Elapsed

使用System.Timers.Timer类:

  1. Interval设置为period作为频率倒数。
  2. Elapsed事件处理该过程。
  3. 原因,我不喜欢这样:

  1. 经常出现交叉线程问题
  2. 延迟的流程实例(例如由于意外的数据加载或网络延迟)可能导致异步操作。
  3. 问题

在这些情况下,哪种模式/方法被认为是最佳实践?原谅冗长的细节,不胜感激建议。

非常感谢

我的主要工作重点是集成各种硬件以形成用于工业自动化的连续状态机。这些应用程序通常需要以下工作流程:...

c# synchronization state-machine
1个回答
0
投票

如果您熟悉IObservable和System.Reactive.Linq,则可以使用Observable.Interval。如果您要实现一些自定义线程调度,则它也具有接受IScheduler参数的重载,但是默认线程调度在大多数情况下都可以很好地工作。

© www.soinside.com 2019 - 2024. All rights reserved.