我正在制定计时系统,我将实施一个计时器班。Sleep()是否不准确?
#include <windows.h>
#include <stdio.h>
#include <time.h>
int main()
{
clock_t t1, t2;
t1 = clock();
Sleep(10);
t2 = clock();
printf("%i\n", (int)(t2 - t1));
return 0;
}
该程序应打印“10”,但打印“15”或“16”。我需要更准确的,这是少于1毫秒!建议? (也许select()的超时?)
注意:我已经在Windows 7旗舰版x86上运行此程序。用MinGW(C/C++)x86编译的程序。
...甚至是timeBeginPeriod(1)。但是:更好地使用'TIMECAPS'结构的'wPeriodMin',由 填充[timeGetDevCaps](http://msdn.microsoft.com/en-us/library/windows/desktop/dd757627%28v=vs.85 %29.aspx)。 注意:结果周期取决于底层硬件。 – Arno
只问你需要什么,使用1是浪费。最短的时间段并不重要,它已经自动调整,如果超过了你的需要,你就无法做任何事情。无论如何,最后一台不支持它的机器在15年前就死了。 –
它比需要更多吗?睡眠(10)的调用在中断时可能不会总是发生**。在使用timeBeginPeriod(10)时,在下一个中断之前5 ms调用Sleep(10)将导致15 ms的总睡眠。 – Arno