相关疑难解决方法(0)

.NET Thread.Sleep()是随机不精确的

在我的.NET应用程序中,我必须重放一系列传感器事件.所以我创建了一个触发这些事件的线程(通常大约每1-4毫秒).我在这个线程中实现了一个循环,用于Thread.Sleep(...)让线程在事件之间休眠.

基本上它看起来像这样:

void RunThread() {
  var iter = GetAllEvents().GetEnumerator();
  if (!iter.MoveNext()) {
    return;
  }

  DateTime lastEventTime = iter.Current.Timestamp;
  FireEvent(iter.Current);

  while (iter.MoveNext()) {
    MyEvent nextEvent = iter.Current;

    int timeout = (int)(nextEvent.Timestamp - lastEventTime).TotalMilliseconds; 
    Thread.Sleep(timeout);

    FireEvent(nextEvent);
    lastEventTime = nextEvent.Timestamp;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是Thread.Sleep()有时会尊重指定的超时,有时则不会.

我添加了一个检查(使用StopWatch,在上面的代码中不可见),关于睡眠实际花了多长时间.以下是一些结果:

Expected timeout of 1 ms but got 15 ms.
Expected timeout of 2 ms but got 13 ms.
Expected timeout of 3 ms but got 15 ms.
Expected timeout of 2 ms but …
Run Code Online (Sandbox Code Playgroud)

.net multithreading

4
推荐指数
1
解决办法
933
查看次数

标签 统计

.net ×1

multithreading ×1