我有点疑惑。根据{{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
答案 0 :(得分:0)
将线程置于休眠状态会告诉线程在给定时间内屈服于系统。此时间仅与硬件时钟和系统的时间分辨率一样准确。硬件时钟极易受温度和电压变化的影响,如果时钟分辨率小于请求的分辨率,则可能导致线程操作的早期或晚期恢复。