Avatar billede jeppejp Nybegynder
08. november 2002 - 15:48 Der er 37 kommentarer og
2 løsninger

Finde CPU load

Hvordan finder jeg ud af hvad ens CPU load er??

Jeg vil gerne lave noget ligende "Joblisten" i win2k...
Avatar billede soreno Praktikant
08. november 2002 - 15:52 #1
hvis det er win9x så kan den vist nok findes i regdb (HKEY_DYN_DATA"
hvis det er winnt så skal du lave et kald til NtQuerySystemInformation som er i "ntdll.dll". Dette kald er tilsyneladende udokumenteret hos microsoft - jeg har ikke kunnet finde det.

jeg har noget c++ kode der viser hvodan det kan gøres, men ingen basic..
Avatar billede jeppejp Nybegynder
08. november 2002 - 15:52 #2
så det er ikke noget du kan hjælpe med??
Avatar billede soreno Praktikant
08. november 2002 - 15:53 #3
jeg kan fortælle dig algoritmen, men du må selv implementere den (jeg kender intet til basic)
Avatar billede jeppejp Nybegynder
08. november 2002 - 15:54 #4
det må du gerne...
Avatar billede soreno Praktikant
08. november 2002 - 15:56 #5
du skal bruge nogle datastrukturer:
typedef struct
{
      DWORD  dwUnknown1;
      ULONG  uKeMaximumIncrement;
      ULONG  uPageSize;
      ULONG  uMmNumberOfPhysicalPages;
      ULONG  uMmLowestPhysicalPage;
      ULONG  uMmHighestPhysicalPage;
      ULONG  uAllocationGranularity;
      PVOID  pLowestUserAddress;
      PVOID  pMmHighestUserAddress;
      ULONG  uKeActiveProcessors;
      BYTE    bKeNumberProcessors;
      BYTE    bUnknown2;
      WORD    wUnknown3;
} SYSTEM_BASIC_INFORMATION;

typedef struct
{
      LARGE_INTEGER  liIdleTime;
      DWORD          dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;

typedef struct
{
      LARGE_INTEGER liKeBootTime;
      LARGE_INTEGER liKeSystemTime;
      LARGE_INTEGER liExpTimeZoneBias;
      ULONG        uCurrentTimeZoneId;
      DWORD        dwReserved;
} SYSTEM_TIME_INFORMATION;

en definition på metoden:
typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

selve koden:
int getCpuBelastning_winnt()
{
  PROCNTQSI NtQuerySystemInformation;

  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};
  HINSTANCE dll;

  dll = LoadLibrary("ntdll.dll");
  if(dll != NULL)
  {
      NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(dll, "NtQuerySystemInformation");
  }
  FreeLibrary(dll); 

  if(!NtQuerySystemInformation)
  {
      return -1;
  }

  // Hent antal processor i computeren.
  status = NtQuerySystemInformation(SystemBasicInformation, &SysBaseInfo, sizeof(SysBaseInfo), NULL);
  if (status != NO_ERROR)
  {
      return -1;
  }

  for(int i=0;i<2;i++)
  {
      //Hent system tid.
      status = NtQuerySystemInformation(SystemTimeInformation, &SysTimeInfo, sizeof(SysTimeInfo), 0);
      if(status!=NO_ERROR)
      {
        return -1;
      }
     
      //Hent CPU udnyttet tid.
      status = NtQuerySystemInformation(SystemPerformanceInformation, &SysPerfInfo, sizeof(SysPerfInfo), NULL);
      if(status != NO_ERROR)
      {
        return -1;
      }
 
      //Hvis det er første gennemløb springes der over.
      if(liOldIdleTime.QuadPart != 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;
      }
      liOldIdleTime = SysPerfInfo.liIdleTime;
      liOldSystemTime = SysTimeInfo.liKeSystemTime;

      //sov et sekund
      Sleep(1000);

  }
  return (UINT)dbIdleTime;
}


så må du stille spørgsmål til det du ikke forstår - så skal jeg prøve at besvare dem.
Avatar billede jeppejp Nybegynder
08. november 2002 - 16:04 #6
jeg kan ikke direkte smide det der over i VB jo... :(

Jeg lader lige spm'et stå åben lidt... :D
Avatar billede soreno Praktikant
08. november 2002 - 16:06 #7
Der er muligvis en anden der kan hjælpe dig med at få det oversat. Muligvis er noget lign. allerede lavet. Men jeg brugte en hel del tid på at finde noget konkret om emnet da jeg lavede ovenstående, så det er måske svært at finde. Faktisk er ovenstående "bare" en modificering af noget kode jeg fandt "somewhere on the Internet" :-)
Avatar billede soreno Praktikant
08. november 2002 - 16:11 #8
jeg kan lave en dll der indkapsler koden - men så vil du stadig skulle oversætte følgende kode:
dll = LoadLibrary("ntdll.dll");
  if(dll != NULL)
  {
      NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(dll, "NtQuerySystemInformation");
  }
  FreeLibrary(dll);
Avatar billede tubber Juniormester
08. november 2002 - 16:12 #9
http://www.zarr.net/vb/download/codedetail.asp?code=201 <-- der kan du hente en ting der viser det, med source.....
Avatar billede jeppejp Nybegynder
08. november 2002 - 16:15 #10
bortset fra at det ikke virker tubber... :(
Avatar billede tubber Juniormester
08. november 2002 - 16:17 #11
det virker her......har lige prøvet den
Avatar billede jeppejp Nybegynder
08. november 2002 - 16:17 #12
tubber kører du Windows 98??
Avatar billede jeppejp Nybegynder
08. november 2002 - 16:19 #13
hos mig er der kun 0% .,,, ;/
Avatar billede tubber Juniormester
08. november 2002 - 16:19 #14
Nope 2k, men det skulle virke i 9x, me, 2k og NT
Avatar billede jeppejp Nybegynder
08. november 2002 - 16:20 #15
det er mærkeligt jeg ser kun 0 %.... hele tiden...
Avatar billede tubber Juniormester
08. november 2002 - 16:20 #16
hvad får du af fejl ?
Avatar billede tubber Juniormester
08. november 2002 - 16:21 #17
prøv at sætte den til at lave noget så....

f.eks. noget billedebehandling...

chekkede den sammen med den der er i 2k - de fulgtes af....
Avatar billede tubber Juniormester
08. november 2002 - 16:25 #18
Jeg har en anden, men mangler en ocx, ser på det senere skal lige ud og handle :O)
Avatar billede tubber Juniormester
08. november 2002 - 18:42 #19
Har den ocx nu....

Det ser ud til den kun virker i 9x og me, kan ikke teste den men kan da maile den til dig......
Avatar billede jeppejp Nybegynder
09. november 2002 - 19:25 #20
hmm, jeg kører win2k og den virker sq ikke... :(
Avatar billede jeppejp Nybegynder
09. november 2002 - 19:29 #21
Jeg har lige testet den på en anden win2k også, det virker heller ikke...

spooky
Avatar billede jeppejp Nybegynder
09. november 2002 - 19:37 #22
ehh dumt spm men,
skal man ikke bare åbne .vbp filen, og så trykke "play" ??
Avatar billede tubber Juniormester
09. november 2002 - 19:37 #23
jo det gør jeg og den viser cpuload
Avatar billede jeppejp Nybegynder
10. november 2002 - 11:47 #24
tubber >

kunne du ikke lige compilere din og så sende den til min mail??

jeppejp@hotmail.com ??
Avatar billede tubber Juniormester
10. november 2002 - 13:55 #25
Den er på vej :O)

Jeg har lige smidt en always on top på, så er det nemmere at chekke den :O)

/Tubber
Avatar billede jeppejp Nybegynder
10. november 2002 - 13:58 #26
Det er fandme mystisk ... men det virker altså ikke... :(

:( :(
Avatar billede tubber Juniormester
10. november 2002 - 14:02 #27
hmmmm.....giver den ikke udslag hvis du starter programmer eller noget`?
Avatar billede jeppejp Nybegynder
10. november 2002 - 14:04 #28
Jeg kører den paralelt med den i win2k...
den kører op og ned, men den anden står bare stille...
Det er wierd... :(
Avatar billede jeppejp Nybegynder
10. november 2002 - 14:05 #29
fuck!! cpu.exe bruger 12.0 mbram
Avatar billede tubber Juniormester
10. november 2002 - 14:06 #30
Har lige sendt et screendump af hvordan min står når jeg kører en divx.....
Avatar billede tubber Juniormester
10. november 2002 - 14:08 #31
jeg har win2k sp3 og visual basic sp4 ved ikke  om det har noget med det at gøre.....
Avatar billede jeppejp Nybegynder
11. november 2002 - 21:57 #32
fandt selv et svar...

hvis nogen er intereserede skriv :D  (PÅ mail)
Avatar billede taager-kongen Nybegynder
13. november 2002 - 18:34 #33
ja tak...
Avatar billede sion Nybegynder
13. november 2002 - 20:23 #34
det er sq lidt svært at følge diskutionen... sådan en crappy server-fejl! :(
Avatar billede tubber Juniormester
14. november 2002 - 06:47 #35
Sion:

Hvad er det du kunne tænke dig at vide ?
Avatar billede sion Nybegynder
14. november 2002 - 17:41 #36
Ikke noget, ellers tak tubber... Igår var hele siden bare black p.g.a. en serverfejl, men nu ser det hele ud til at være i skønneste orden :)
Avatar billede tubber Juniormester
14. november 2002 - 17:51 #37
:O)
Avatar billede sion Nybegynder
14. november 2002 - 17:52 #38
ups... siden var ikke black, men blank - ellers havde det vist været min monitor den var gal med ;)
Avatar billede tubber Juniormester
14. november 2002 - 18:17 #39
hehe jae regnede også med det var det du mente :O)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester