怎样得到一个线程的CPU使用率阿?加急,弟兄们帮忙啊

budded 2004-11-18 03:23:54
怎样得到一个线程的CPU使用率阿?加急,弟兄们帮忙啊
...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterpub 2004-11-23
  • 打赏
  • 举报
回复
这是取得进程的,不是线程
renfeiyang 2004-11-18
  • 打赏
  • 举报
回复
学习
yqdragon 2004-11-18
  • 打赏
  • 举报
回复
*****学习*****
gg137zeus 2004-11-18
  • 打赏
  • 举报
回复
up
cwwa 2004-11-18
  • 打赏
  • 举报
回复
楼上的该说的都说了,希望能帮到楼主
drunkboy 2004-11-18
  • 打赏
  • 举报
回复
学习。。。。。
masterjames 2004-11-18
  • 打赏
  • 举报
回复
同意楼上
beyondtkl 2004-11-18
  • 打赏
  • 举报
回复
windows核心编程里有代码 好像..
  • 打赏
  • 举报
回复
GetProcessUse(PROCESS_INFORMATION proc,_JOBOBJECT_BASIC_ACCOUNTING_INFORMAT Info)
{

Handle hJob=CreateJobOjbect(NULL,NULL);
AssignProcessToJobObject(hjob,proc.hProcess,NULL,0,0);
QueryInformationJobOjbect(hJob,Info)
closeHandle(hjob);
}

typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
{
LARGE_INTEGER TotalUserTime;
LARGE_INTEGER TotalKernelTime;
LARGE_INTEGER ThisPeriodTotalUerTime
LARGE_INTEGER thisPeriodTotalKernelTime;
DWORD TotalPageFaultCount
DWORD TotalProcess
DWORD ActiveProcesses
DWORD TotalTerminatedProcesses;
}_JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*_JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
请提交FAQ
Friecin 2004-11-18
  • 打赏
  • 举报
回复
bool CanGetCPUUsage()
{
//os version information structure
OSVERSIONINFO OsVersionInfo;
OsVersionInfo.dwOSVersionInfoSize= sizeof(OSVERSIONINFO);
//get os version
GetVersionEx(&OsVersionInfo);
//only run in win2000/nt OS
if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
{
// MessageBox("Only run in Win2K/NT,\\nYour OS is not Win2000/NT!","prompt:");
return false;
}

//Get NtQuerySystemInformation Address from ntdll.dll
NtQuerySystemInformation =(NTQSI)GetProcAddress(
GetModuleHandle("ntdll.dll"),
"NtQuerySystemInformation" );

if (!NtQuerySystemInformation)
{
// MessageBox("no this function");
return false;
}

// get num of processors
status = NtQuerySystemInformation(0,&SysBaseInfo,sizeof(SysBaseInfo),NULL);
if (status != NO_ERROR)
{
// MessageBox("failed to query basic info(num of processors)");
return false;
}
return true;
}
double GetCPUUsage()
{
// get system time
status = NtQuerySystemInformation(3,&SysTimeInfo,sizeof(SysTimeInfo),0);
if (status!=NO_ERROR)
{
// MessageBox("failed to get system time!");
return ret_error;
}

// get cpu idle time
status = NtQuerySystemInformation(2,&SysPerfInfo,sizeof(SysPerfInfo),NULL);
if (status != NO_ERROR)
{
// MessageBox("failed to get cpu time");
return ret_error;
}
if (liOldIdleTime.QuadPart != 0)
{
// new cpu Time = NewTime - OldTime
dbCpuIdleTime =LI64ToDouble(SysPerfInfo.liIdleTime)-LI64ToDouble(liOldIdleTime);
dbSysTime =LI64ToDouble(SysTimeInfo.liKeSystemTime)-LI64ToDouble(liOldSysTime);

//get cpu usage
unCpuUsage=100 - 100*(dbCpuIdleTime/dbSysTime)/(double)SysBaseInfo.bKeNumberProcessors+0.5;
}

// store new cpu idle and system time
liOldIdleTime = SysPerfInfo.liIdleTime;
liOldSysTime = SysTimeInfo.liKeSystemTime;

return unCpuUsage;
}

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧