c#Thread.Sleep没有睡觉“至少......”毫秒

时间:2017-07-23 16:34:02

标签: c# sleep

我有点疑惑。根据{{​​3}},睡眠功能应该“......阻止当前线程至少......”,这意味着最小的睡眠时间。

然而,一个简短的测试程序意味着它的睡眠时间不到200毫秒。它告诉我在1199ms内拨打了6次电话,这意味着睡眠时间一直短于200ms。

我使用的示例代码:

    static int numCalls = 0;
    static Stopwatch swSamples = new Stopwatch();

    static void Main(string[] args) {

        swSamples.Start();
        for (int i = 0; i < 6; i++) {

            // wait
            Thread.Sleep(200);

            // make call
            numCalls++;

        }

        // display 
        Console.WriteLine("numCalls: " + numCalls + "   -   " + swSamples.ElapsedMilliseconds);
        Console.ReadLine();

    }

请注意,这个问题不是关于每秒获得5次确切的呼叫,而是关于线程实际睡眠的时间不是“至少”...... ms

1 个答案:

答案 0 :(得分:0)

将线程置于休眠状态会告诉线程在给定时间内屈服于系统。此时间仅与硬件时钟和系统的时间分辨率一样准确。硬件时钟极易受温度和电压变化的影响,如果时钟分辨率小于请求的分辨率,则可能导致线程操作的早期或晚期恢复。