我想知道我是否可以計算每個線程的運行時間。 我使用pthread在C++中實現多線程程序。我們知道,每個線程都會與CPU競爭。 我可以使用clock()函數來計算每個線程消耗的CPU時鐘的實際數量嗎?C++線程運行時間
我的程序是這樣的:
Class Thread()
{
Start();
Run();
Computing();
};
的start()是啓動多個線程。然後每個線程都會運行計算功能來做一些事情。我的問題是我如何計算每個線程的運行時間以用於計算功能
我想知道我是否可以計算每個線程的運行時間。 我使用pthread在C++中實現多線程程序。我們知道,每個線程都會與CPU競爭。 我可以使用clock()函數來計算每個線程消耗的CPU時鐘的實際數量嗎?C++線程運行時間
我的程序是這樣的:
Class Thread()
{
Start();
Run();
Computing();
};
的start()是啓動多個線程。然後每個線程都會運行計算功能來做一些事情。我的問題是我如何計算每個線程的運行時間以用於計算功能
你在使用什麼平臺?如果您使用的是Linux,並在內核> 2.6.26可以使用RUSAGE_THREAD
標誌getrusage
:
struct rusage usage
getrusage(RUSAGE_THREAD, &usage);
內struct rusage
,你會發現ru_utime
和ru_stime
分別跟蹤用戶時間和系統時間。在開始時調用一次,然後一次,你可以得到三角洲。
GNU libc中的足夠新版本和Linux內核支持下列時鐘: CLOCK_REALTIME 全系統實時時鐘。設置這個時鐘需要適當的權限。
CLOCK_MONOTONIC 無法設置的時鐘,表示從某個未指定起點開始的單調時間。
CLOCK_PROCESS_CPUTIME_ID 來自CPU的高分辨率每進程計時器。
CLOCK_THREAD_CPUTIME_ID 線程特定的CPU時鐘。
所以你可能有CLOCK_THREAD_CPUTIME_ID試一試。
您是否需要在程序中始終進行此測量並使用測量的數字?或者這是爲了調試目的? 如果對其進行調試,許多工具都可以幫助您解決問題。讓我們知道您正在編碼的平臺以及您使用的IDE,並且我們可能會提供幫助:-) – Fuzz 2010-04-29 05:00:09
沒錯。如果你所要問的原因是你想找出需要改變的地方,以便儘量減少總體執行時間,那麼在SO上找到了很好的答案。 – 2010-04-29 12:25:57