2015-12-22 61 views
0

我創建了一個簡單的定時器程序,如下所示。睡眠()沒有給出準確的時間表示

#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

https://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx – OldProgrammer

+0

使用['timeGetDevCaps']檢查最低分辨率(https:/ /msdn.microsoft.com/en-us/library/windows/desktop/dd757627(v=vs.85).aspx) – NathanOliver

+0

除了計時問題,您正在使用'float'並遞增0.01。這不符合你的想法。 –

回答

3

其他事情發生在循環中 - 這需要時間。睡眠至少需要一段時間 - 但可能需要更多時間。

使用睡眠,但通過使用時鐘來調整時間來考慮這些因素。

+0

夠簡單。謝謝。 – JGerulskis

1

這是因爲你的系統時鐘決定了什麼時候喚醒你的進程,它會在滴答聲之間被捕獲。