Код (Text): double dSystemTime,dIdleTime,cpuIdleTime,cpuUsage; unsigned __int64 oldIdleTm,oldCurTm,newIdleTm,newCurTm; newIdleTm=SystemProcessorTimes->IdleTime.QuadPart; newCurTm=SystemTimeOfDayInformation->CurrentTime.QuadPart; if(oldIdleTm!=0){ dIdleTime=newIdleTm-oldIdleTm; dSystemTime=newCurTm-oldCurTm; if(dSystemTime!=0){ cpuIdleTime=dIdleTime/dSystemTime; cpuUsage=(1.0 - cpuIdleTime/(double)(SystemBasicInformation->NumberProcessors) )*100.0; } } oldIdleTm=newIdleTm; oldCurTm=newCurTm; Этот код нормально работает с 1 cpu, но появляются проблемы с HyperThreading (выдает ~51% usage). Может правильнее брать ActiveProcessors ? p.s. возможности самому посидеть за компом с hyperthreading пока нету, такчто не судите строго...
Если б была возможность потыкать на таком компе, я б наковырял. Может кто знает какие-нибудь доки как считать cpu, а то что-то нужное не найду никак.
Я тут переделал кое-что. Посмотрите кто-нибудь с HyperThreading процессором будет ли это работать: newIdleTm=SystemPerformanceInformation->IdleTime.QuadPart; newCurTm=SystemTimeOfDayInformation->CurrentTime.QuadPart; if(oldIdleTm!=0){ cpuIdleTime=newIdleTm; cpuIdleTime-=oldIdleTm; dbSystemTime=newCurTm; dbSystemTime-=oldCurTm; if(dbSystemTime){ cpuIdleTime/=dbSystemTime;// CurrentCpuIdle = IdleTime / SystemTime cpuUsage=1.0-cpuIdleTime; cpuUsage*=100.0; } } oldIdleTm=newIdleTm; oldCurTm=newCurTm;