【问题标题】:Faster than Thread.Sleep(1)? [duplicate]比 Thread.Sleep(1) 快吗? [复制]
【发布时间】:2014-11-21 10:05:45
【问题描述】:

我需要我的程序等待大约 1 毫秒。 为此,我使用:

System.Threading.Thread.Sleep(1)

但是大约慢了 10 倍。

在以下程序中:

    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    for (int i = 0; i < 1000; i++ )
        System.Threading.Thread.Sleep(1);

    Console.WriteLine(stopWatch.ElapsedMilliseconds);

我得到输出:15110

有没有办法只停 1 毫秒?

更新 1:为什么我需要这样做

在我工作的公司里,有一台由 PC 控制的机器(CNC 等离子)。 有人用密码保护了配置区域,但没有人记得密码。 由于密码只能通过鼠标输入,我正在编写一个暴力破解程序来获取该密码。

问题是我需要在每个输入的数字之间等待大约 1ms。

更新 2:有一个类似的问题,但没有解决 :(

【问题讨论】:

  • 你为什么要阻止你的程序正好 1 毫秒?
  • 记住 for 循环也会减慢它的速度,Console.WriteLine 和计时器本身也会减慢速度。它*可能会停止程序 1 毫秒,但是您额外的 for 循环和计时器会减慢它的速度。我发现将输出写入屏幕最会减慢一切,也许将值分配给 Console.WriteLine 之前的变量,然后输出该变量。
  • 经典XY problem.
  • 似乎“真正的”副本在这里:stackoverflow.com/questions/9518106/…

标签: c# .net multithreading sleep


【解决方案1】:

我认为问题在于您对Thread.Sleep的理解。

它不会等待恰好 1 毫秒。它将等待至少 1 毫秒。

根据MSDN

操作系统不会在指定的时间内安排线程执行。

当操作系统再次拾取线程时,可能已经超过 1 毫秒。当您增加等待时间时,差异将不那么明显。如果你迭代并等待1ms,差异可能会比较大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2013-05-29
    • 2012-11-03
    • 2010-10-20
    • 1970-01-01
    • 2016-12-12
    • 2012-01-13
    相关资源
    最近更新 更多