2009/06/12

sleep 1 ms ?

還記得四月初時我寫的這一篇timer 與 while(1)嗎?最近在用 visual studio 開發應用程式時有用到 sleep() 函式來暫時停止程式運行,用我們的話說,就是我們要讓程式的執行頻率是 125 次/秒,也就是我們想要用 sleep(8) 來達到目的。sleep(8) 應該要能暫停 8ms, 結果實驗數據是 16ms, 甚至當我們調整成 sleep(1), 答案也一樣。

慘了,效率只有一半!這問題困擾很久,試著用 timer,答案一樣的令人沮喪,也試過透過 Windows Message 的方式,沒用。

好了,最後結果是參考timeBeginPeriod搭配 timeEndPeriod。因為這會改到系統的時間設定,因此記得要成對。

簡單寫個範例如下:
timeBeginPeriod(8);
sleep(8);
timeEndPeriod(8);


想對 Timer 有更進一步了解的人,可以自行參考Timer 介紹一文。

1 意見:

Matt 提到...

請問C# 應該要怎麼做呢?