GetThreadTimes獲取其它執行緒cpu時間
阿新 • • 發佈:2019-01-27
http://www.cnblogs.com/eaglet/archive/2009/03/11/1408809.html
鄙視下上面的垃圾博文,純粹忽悠人
參考文章: http://blog.kalmbachnet.de/?postid=28 這是一個德國人寫的部落格,我看了好幾遍,對他寫的德式英語還是不太明白,(本人英文水平不高也是事實),所以我理解的不對的地方還望大家指正。不過結論肯定是正確的,就是通過GetThreadTimes 得到的執行緒佔用時間是不準確的,在某種條件下甚至是很不準確的。 另外我發現呼叫GetThreadTimes獲取其它執行緒的計數基本得不到,我還沒有搞明白是什麼原因。
搞不明白不去看官方文件!!!!!!!!!!!!
檢視msdn 裡GetThreadTimes的文件http://msdn.microsoft.com/en-us/library/windows/desktop/ms683237(v=vs.85).aspx
hThread其計時資訊尋求的執行緒的控制代碼。該控制代碼必須具有的 THREAD_QUERY_INFORMATION 或 THREAD_QUERY_LIMITED_INFORMATION 訪問權。有關詳細資訊,請參見執行緒安全和訪問許可權。Windows Server 2003 和 Windows XP: 控制代碼必須具有的 THREAD_QUERY_INFORMATION 的訪問許可權。在這篇文章BOOL WINAPI GetThreadTimes( _In_ HANDLE hThread,//需要獲取cpu時間的執行緒控制代碼 _Out_ LPFILETIME lpCreationTime,//建立時間 _Out_ LPFILETIME lpExitTime,//退出時間 _Out_ LPFILETIME lpKernelTime,//核心時間 _Out_ LPFILETIME lpUserTime//使用者時間 );
Thread Security and Access Rightshttp://msdn.microsoft.com/en-us/library/windows/desktop/ms686769(v=vs.85).aspx
Creating a Security Descriptor for a New Object in C++ http://msdn.microsoft.com/zh-cn/library/aa446595.aspx
FILETIME ftKernelTimeStart, ftKernelTimeEnd;
FILETIME ftUserTimeStart, ftUserTimeEnd;
FILETIME ftDummy;
HANDLE hThread;
unsigned threadID;
SECURITY_ATTRIBUTES saThread;
PSECURITY_DESCRIPTOR pSD = NULL; //PSECURITY_DESCRIPTOR安全描述符
pSD = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,
THREAD_QUERY_INFORMATION);
if (NULL == pSD)
{
_tprintf(_T("LocalAlloc Error %u\n"), GetLastError());
}
saThread.nLength = sizeof(saThread);
saThread.lpSecurityDescriptor = pSD;
hThread = (HANDLE)_beginthreadex(&saThread, 0, FirstThread, NULL, 0, &threadID);
if(pSD)
LocalFree(pSD);
GetThreadTimes(hThread, &ftDummy, &ftDummy,
&ftKernelTimeStart, &ftUserTimeStart);