日期:2014-05-17  浏览次数:21353 次

windows Sleep函数长时间运行时间偏移问题
本帖最后由 shenlanzifa 于 2014-03-21 16:34:20 编辑
我在while(true)循环中使用sleep函数,运行的时间长了之后,发现在毫秒级别,时间差值会越来越大。
代码如下:
while (true)
{
GetLocalTime( &sys );   
printf( " thread:%d:%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n", i  
,sys.wYear,sys.wMonth,sys.wDay   
,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds   
,sys.wDayOfWeek); 
printf("\n");

Sleep(60000);//休眠60s
}
刚开始的时间是:2014/03/21 16:06:23.938

运行了一段时间后变成:2014/03/21 16:31:23.951

该如何消除这种毫妙级的时间差呢?
------解决方案--------------------
这个,不算奇怪吧,一来 Sleep() 函数是有精度限制的,二则你这代码除了 Sleep() 之外还有其它代码有消耗啊,再则还可能有其它程序和系统开销的。
------解决方案--------------------
Sleep的精度≈15毫秒。