我正在嘗試使用clock()
方法創建一個簡單的計時器。當應用程序執行時,我的CPU使用率從0%跳到25%。對於一個簡單的程序來說,它只能在幾秒內完成從60到0的計數,但這有點過分。爲什麼我用「clock()」獲得過多的CPU使用率?
我跟隨這名:http://www.cplusplus.com/reference/clibrary/ctime/clock/
的任何原因?有什麼替代方案可以使用嗎?
我正在嘗試使用clock()
方法創建一個簡單的計時器。當應用程序執行時,我的CPU使用率從0%跳到25%。對於一個簡單的程序來說,它只能在幾秒內完成從60到0的計數,但這有點過分。爲什麼我用「clock()」獲得過多的CPU使用率?
我跟隨這名:http://www.cplusplus.com/reference/clibrary/ctime/clock/
的任何原因?有什麼替代方案可以使用嗎?
參見:
http://msdn.microsoft.com/en-us/library/ms686298%28v=vs.85%29.aspx
的代碼你參考:
while (clock() < endwait) {}
顯然只是咀嚼CPU在等待時間過去,因此, 25%的使用率(一個核心)。
while (clock() < endwait) { Sleep(1);}
應該解決你的問題。
// sleep for one second
boost::this_thread::sleep(boost::posix_time::seconds(1));
我最好的猜測是你的問題不是clock
函數,而是wait
函數。
它循環直到達到一定的時間。您應該使用實際掛起程序的功能,如sleep
功能。
最簡單的計時測試是一些僞代碼,這樣更好的運行:
start = get_time()
for 1 .. 10:
do_the_task()
end = get_time()
diff = end - start
print "%d seconds elapsed", diff
在Unix衍生平臺,gettimeofday(2)
返回與自紀元,這使得一些相當不錯的秒和毫秒一個struct解決時間。在其他平臺上,你必須尋找合適的時間源。
感謝您的回覆。我是否需要爲'sleep()'創建另一個線程?因爲我需要定時器在同一時間運行。 – DeadCapacitor 2011-01-31 00:10:42