CPU Auslastung



  • nein da ich versucht habe den Code einzubinden nur die Ausgabe war konstant 0.



  • Läßt sich doch garnicht kompilieren. Eine void-Funktion kann doch nicht 0 zurückgeben. 🙄



  • achso das war aber nicht der grund warum es sich nicht kompilieren, lies die main funktion fehlte. aber dann funktioniert es auch mit der richtigen ausgabe



  • ich hab das zu ner funktion umgeschreiben mit nem double als rückgabewert so das das ganze wieder Stimmig ist. Ich änder es dann jetzt nochmal siehe oben.

    // get new system time 
       status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0); 
       if (status!=NO_ERROR) 
       return 0;
    

    hier gibt er mir nen falschen wert zurück wenn ich anzeige also return status mache dann kommt ne hohe minus Zahl.



  • Bereichsüberschreitung?!



  • bitte poste die zahl.



  • @ flenders wie kann ich das umgehen



  • Eine anderen Typ für den Rückgabewert nehmen 😉 Laut Doku ist muss dies NTSTATUS sein (weiß zwar net, wie das definiert ist, aber egal 🙄 )

    [ Dieser Beitrag wurde am 23.02.2003 um 19:00 Uhr von flenders editiert. ]



  • ich probiers mal aus



  • funktioniert nicht



  • ich krieg die Fehlermeldung Typ nicht definiert.



  • ist doch auch wurscht. der rückgabewert der funktion ist ja nicht die cpu-auslastung sondern der fehlercode.



  • Das soll auch ne Funktion sein die mir die CPU Auslastung zurück gibt und nicht den Fehlercode oder hab ich das wieder Falsch verstanden.



  • Du ermittelst über die Aufrufe von NtQuerySystemInformation nur die Systemzeit und die Idle-Time (Leerlauf), daraus wird dann die Prozessorauslastung berechnet 😉



  • ungefähr so teste es später bin nicht zuhause.

    double CPUAuslastung(void) 
    { 
    SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; 
    SYSTEM_TIME_INFORMATION SysTimeInfo; 
    SYSTEM_BASIC_INFORMATION SysBaseInfo; 
    double dbIdleTime; 
    double dbSystemTime; 
    LONG status; 
    LARGE_INTEGER liOldIdleTime = {0,0}; 
    LARGE_INTEGER liOldSystemTime = {0,0}; 
    
    NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(GetModuleHandle("ntdll"), NtQuerySystemInformation); 
    
    if (!NtQuerySystemInformation) 
    return 0; 
    
    // get number of processors in the system 
    status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL); 
    
    if (status != NO_ERROR) 
    return 0; 
    
    // get new system time 
    status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0); 
    if (status!=NO_ERROR) 
       return 0; 
    
    // get new CPU's idle time 
    status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL); 
    if (status != NO_ERROR) 
       return 0; 
    
    // CurrentValue = NewValue - OldValue 
    dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); 
    dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); 
    
    // CurrentCpuIdle = IdleTime / SystemTime 
    dbIdleTime = dbIdleTime / dbSystemTime; 
    
    // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors 
    dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5; 
    
    return  dbIdleTime; 
    }
    


  • es funktioniert nicht er zeigt mir immer noch nur die 0 bei CPU Auslastung an.
    Was mach ich falsch am anfang hol ich mir doch die Werte aus NtQuerySystemInformation und lass dann die Auslastung berrechnen, so wie im Bsp. , nur das ich daraus ne funktion machen will.

    [ Dieser Beitrag wurde am 25.02.2003 um 16:39 Uhr von mosta editiert. ]



  • Du musst so wie im Code davor die Funktion so machen, dass du 2 mal die Zeiten erfragst und beim 1. Aufruf die Werte speichern, damit du beim 2. Aufruf Zeitdifferenzen bilden kannst! Es sei denn du bist an der durchschnittlichen Auslastung seit Systemstart interessiert 😉

    [ Dieser Beitrag wurde am 25.02.2003 um 17:05 Uhr von flenders editiert. ]



  • wie kann das Ergebnis zwischen Speichern. Wenn ich das als Funktion habe und mit nem Timer aufrufe.



  • In einer globalen Variablen?! Oder static (da bin ich mir grad net ganz sicher)



  • Vielleicht solltest du auch mal überprüfen, bei welchem return er aus deiner Funktion aussteigt.


Anmelden zum Antworten