Sleep()无法准确表示时间

Sleep() does not give accurate representation of time

本文关键字:表示 时间 Sleep      更新时间:2023-10-16

我创建了一个简单的定时器程序,如下所示。

#include <conio.h>
#include <windows.h>
#include <iostream>
int main()
{
    float counter = 0;
    float time = 0;
    std::cin >> time;
    while (true){
        system("cls");
        std::cout << time - counter;
        Sleep(10);
        counter+= .01;
        if (time - counter < 0) break;
    }
}

正如您所看到的,我使用的不是Clock(),而是Sleep()。当我有一个不太精确的计数器(Sleep(1000); counter += 1;)时,与实时相比没有太多变化。然而,我创建的倒计时越精确,它就离实时越远。

  1. 为什么会这样
  2. 如果你知道的话,周围有工作吗?不过没什么大不了的,因为Clock()运行良好。这主要是一个好奇心驱动的问题

循环中还会发生其他事情,这需要时间。此外,睡眠至少需要一段时间,但可能需要更长的时间。

使用睡眠,但通过使用时钟来调整时间,以将这些因素考虑在内。

这是因为决定何时唤醒进程的系统时钟正处于两个周期之间。