[問題] Sleep()delay時間問題

看板C_and_CPP作者 (vincent)時間9年前 (2015/08/04 17:25), 編輯推噓3(307)
留言10則, 5人參與, 最新討論串1/1
開發平台(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? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.217.17 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1438680302.A.574.html

08/04 17:26, , 1F
Sleep()的精度只有16ms左右
08/04 17:26, 1F

08/04 17:28, , 2F
簡單的方式是loop QueryPerformanceCounter()
08/04 17:28, 2F

08/04 17:51, , 3F
請問loop昰什麼意思呢?
08/04 17:51, 3F

08/04 18:17, , 4F
既然你知道怎麼計算時間,就查時間查到時間到為止
08/04 18:17, 4F

08/04 21:11, , 5F
08/04 21:11, 5F

08/04 21:21, , 6F
另外有 busy loop 版的 usleep https://goo.gl/cGW5pu
08/04 21:21, 6F

08/08 18:07, , 7F
select在windows下的範例: http://codepad.org/zacDWzwS
08/08 18:07, 7F

08/08 18:08, , 8F
不過windows真的很不準,如果要精準可能要移到別的os
08/08 18:08, 8F

08/08 18:22, , 9F
修正一下init: http://codepad.org/8bdf7afM
08/08 18:22, 9F

08/10 12:46, , 10F
boost/C++11的chromo有提供比較精準的計數
08/10 12:46, 10F
文章代碼(AID): #1Lm8JkLq (C_and_CPP)