GetThreadTimes获取其它线程cpu时间
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
BOOL WINAPI GetThreadTimes( _In_ HANDLE hThread,//需要获取cpu时间的线程句柄 _Out_ LPFILETIME lpCreationTime,//创建时间 _Out_ LPFILETIME lpExitTime,//退出时间 _Out_ LPFILETIME lpKernelTime,//内核时间 _Out_ LPFILETIME lpUserTime//用户时间 );
hThread 其计时信息寻求的线程的句柄。该句柄必须具有的 THREAD_QUERY_INFORMATION 或 THREAD_QUERY_LIMITED_INFORMATION 访问权。有关详细信息,请参见线程安全和访问权限。 Windows Server 2003 和 Windows XP: 句柄必须具有的 THREAD_QUERY_INFORMATION 的访问权限。在这篇文章
Thread Security and Access Rights http://msdn.microsoft.com/en-us/library/windows/desktop/ms686769(v=vs.85).aspx里看到THREAD_QUERY_INFORMATION,结合说明得出THREAD_QUERY_INFORMATION是安全描述符的一个标志,所以又查看下面这篇文章学习如果创建使用
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);成功执行如下

【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步