//获得CPU使用率void CpuUsage::CalProcessorsUses(){ PROCNTQSI NtQuerySystemInformation; __int64 nIdleTime=0,nKernelTime=0,nUserTime=0,nDpcTime=0,nInterruptTime=0,nTotalTime=0; NtQuerySystemInformation=(PROCNTQSI)GetProcAddress(GetModuleHandleA("ntdll"),"NtQuerySystemInformation"); //利用ntdll内置的API获取CPU int status=NtQuerySystemInformation(SystemProcessorPerformanceInformation, m_ProcessInfo, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION_2) * m_nNumberProcessors, 0); for (int i = 0; i < m_nNumberProcessors; i++) { nIdleTime = m_ProcessInfo.i64IdleTime - m_nOidleTime; nKernelTime = m_ProcessInfo.i64KernelTime - m_nOkerenelTime; nUserTime = m_ProcessInfo.i64UserTime - m_nOuserTime; nDpcTime = m_ProcessInfo.i64DpcTime -m_nOdpctTime; nInterruptTime = m_ProcessInfo.i64InterruptTime - m_nOinterruptTime; nTotalTime = nKernelTime + nUserTime + nDpcTime;// + nInterruptTime; m_nUses =100*(nTotalTime-nIdleTime)/nTotalTime; //计算CPU使用率
m_nOidleTime = m_ProcessInfo.i64IdleTime; m_nOkerenelTime = m_ProcessInfo.i64KernelTime; m_nOuserTime = m_ProcessInfo.i64UserTime; m_nOdpctTime = m_ProcessInfo.i64DpcTime; m_nOinterruptTime = m_ProcessInfo.i64InterruptTime; }}
设置了一个定时器:
this->timer = new QTimer; QObject::connect(this->timer,SIGNAL(timeout()),this,SLOT(get_system_info())); this->timer->start(1000); //1秒
我发现定时器对我调用去获得cpu各个核的kerneltime,interrupttime等时间有很大的影响,很多时间都不准。用Visual Stduio2010只实现的获取没任何问题,移植到Qt里面 时间就不对了。。。。请问是怎么回事啊,或者怎解决啊?求大神,求助!感谢啊!