[问题] Sleep()delay时间问题

楼主: b92299 (vincent)   2015-08-04 17:24:59
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2005
作业系统:windows 7 64bit
CPU:I7-3770 3.4GHz
问题(Question):
目前想要精准的算出1ms
不过不管是使用QueryPerformanceCount / QueryPerformanceFrequency
或者timeGetTime
最小就算到10ms
而下一个单位数则是20ms并无法测出非10ms倍数的时间像是15ms
程式码如下
LARGE_INTEGER t1, t2, ts;
QueryPerformanceFrequency(&ts);
QueryPerformanceCounter(&t1);
Sleep(1);
QueryPerformanceCounter(&t2);
printf("Lasting Time: %lf\n",(t2.QuadPart-t1.QuadPart)/(double)(ts.QuadPart));
在有些电脑使用这个方法可以算到1ms
不过我的电脑在怎么试都无法
请问是sleep()这个function的问题吗?
还是平台的问题?
有什么方法可以精准算到1ms?
谢谢
作者: azureblaze (AzureBlaze)   2015-08-04 17:26:00
Sleep()的精度只有16ms左右简单的方式是loop QueryPerformanceCounter()
楼主: b92299 (vincent)   2015-08-04 17:51:00
请问loop昰什么意思呢?
作者: azureblaze (AzureBlaze)   2015-08-04 18:17:00
既然你知道怎么计算时间,就查时间查到时间到为止
作者: LiloHuang (十年一刻)   2015-08-04 21:11:00
请爬文 #1Ku5nCFJ (C_and_CPP)另外有 busy loop 版的 usleep https://goo.gl/cGW5pu
作者: jaeger8   2015-08-08 18:07:00
select在windows下的范例: http://codepad.org/zacDWzwS不过windows真的很不准,如果要精准可能要移到别的os修正一下init: http://codepad.org/8bdf7afM
作者: Killercat (杀人猫™)   2015-08-10 12:46:00
boost/C++11的chromo有提供比较精准的计数

Links booklink

Contact Us: admin [ a t ] ucptt.com