Sleep()不能准确表示时间

时间:2015-12-22 14:36:02

标签: c++

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

#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()工作正常,但不是什么大问题。这主要是一个好奇心驱动的问题。

2 个答案:

答案 0 :(得分:3)

其他事情发生在循环中 - 这需要时间。睡眠至少需要一段时间 - 但可能需要更多时间。

使用睡眠但使用时钟调整时间以考虑这些因素。

答案 1 :(得分:1)

这是因为你的系统时钟决定了什么时候唤醒你的过程,而这个系统时钟正处于滴答之间。