2014-11-21 39 views
0

我需要我的程序等待大约1ms。 要做到这一点我用:比Thread.Sleep(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

有没有办法只停留1ms?

更新1:我为什么要做这个

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

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

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

+5

为什么你想要阻止你的程序正好1ms? – Dai 2014-11-21 10:07:02

+1

[相关](http://stackoverflow.com/q/8742/1997232)。 – Sinatr 2014-11-21 10:07:24

+2

***请记住,'for'循环也会减慢速度,Console.WriteLine和定时器本身也会变慢。它*可以*停止程序1ms,但你额外的'for'循环和定时器减慢它。我发现将输出写入屏幕会减慢最大的一切,可能会在Console.WriteLine之前将值赋给变量,然后输出该变量。 – cybermonkey 2014-11-21 10:07:32

回答

7

我认为这个问题是在你的Thread.Sleep的理解

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

根据MSDN

线程将不会被安排由操作系统执行指定的时间。

当OS再次拾取线程时,可能已经超过1毫秒。当你增加等待的时间时,差异将不那么明显。如果您迭代并等待1ms,则差异可能相对非常大。