2016-09-22 52 views
-1

正在尋求幫助,以獲取C程序中真正的用戶系統時間函數。例如,讀取文件需要多長時間。我一直在尋找#include並使用帶-p標誌的time()函數,但是我正在執行此操作。我想我的問題是,如果我有:在程序中獲取真正的用戶系統時間函數

time_t total_time; 
time_t start, end; 

start = time(-p, &start); 

<some code> 

end = time(-p, &end); 

printf("real = %e, user = %S, sys = %S\n", ???????????); 

我明白三次之間的差異,只是不知道得到結果的正確執行。

+0

你的問題與[標籤:實時]無關。不要盲目標籤,也不要濫用標準術語。 – EJP

回答

0

檢查time()的返回值:

值通常返回表示自00:00小時的秒數,1970年1月1日UTC(即,當前Unix時間戳)。雖然庫可能會使用不同的時間表示形式:可移植程序不應直接使用此函數返回的值,但始終要依靠對標準庫的其他元素的調用來將它們轉換爲可移植類型(例如localtime,gmtime或difftime) 。

要顯示實時,請閱讀answer

對於用戶和系統,閱讀:How to measure user/system cpu time for a piece of program?

+0

我讀過這些帖子和更多的內容,其中包括time()的linux手冊頁。我明白它的作用,以及每個值代表什麼。我有一個執行它的問題。我不能使用clock(),因爲我必須在一臺非常舊的機器上運行此代碼,並且它不喜歡clock()func。感謝您的意見,但非常感謝。 – LD50

+0

不客氣@ LD50,我提出了你的問題,希望得到關注!等待看看是否發佈了另一個答案。如果不是,請考慮接受我的答案。 – gsamaras

0

真正的運行時間可以通過前後調用time(),並減去結果來確定。如果您想便攜,您應該使用difftime函數來執行減法,因爲從time()返回的值不能保證是一個數字。

但是,如果您使用的是符合POSIX標準的系統,則從time()開始的返回值將是曆元以來的秒數,因此您可以減去它們以獲取經過的秒數。

如果您想要更高分辨率的結果,您可以使用gettimeofday(),它返回包含毫秒分辨率時間的timeval結構。

訪問用戶系統時間最便捷的方法是調用clock() C庫函數,但是您已在@gsamaras的註釋中注意到您的系統沒有此功能。

根據您使用的系統,您可能可以調用系統功能times()getrusage()getrusage()會更容易使用,因爲它返回值爲timeval結構體,其中包含秒和毫秒。 times()返回時鐘滴答,如果你想要實際的時間單位,你將不得不轉換時鐘滴答。

如果您的程序是線程化的,並且您正在使用Linux,getrusage()還提供了一個額外的優點:您可以獲取當前線程的資源消耗。

無論您選擇哪個函數,您都需要獲取初始讀數,最終讀數,並減去兩個結果以查看函數耗用的時間。

相關問題