zoukankan      html  css  js  c++  java
  • 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
    "), 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);
        成功执行如下 QQ截图20140212205741
  • 相关阅读:
    ASP.NET MVC 3 Internationalization
    Windows 8学习笔记(十)Notification
    Windows 8学习笔记(十二)集合控件
    Windows 8学习笔记(七)Input输入设备
    【配置与安装】解决类似umount target is busy挂载盘卸载不掉问题
    【coredump】coredump 使用
    【C++调试】"./xxx: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./xxx)" 执行报错
    【配置与安装】CentOS7 多磁盘合成卷组并创建LVM,挂载到同一目录
    Unix 知识
    3D创作概念入门
  • 原文地址:https://www.cnblogs.com/zero5/p/3604030.html
Copyright © 2011-2022 走看看