[問題] 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