07. oktober 2002 - 22:49Der er
4 kommentarer og 1 løsning
Omskrivning af denne kode
OK, her kommer lige en ordentlig gang kode. Koden har jeg fundet på planetsourcecode.com og den virker faktisk helt fint. Nu er problemet bare at det er lavet som et dos program. Jeg skal bruge det i et windows program. Jeg har forsøgt at omskrive main funktionen, så den returnerer værdien istedet for blot at udskrive den, men det gav enten fejl eller også returnerede den bare 0.
Så kort fortalt : Jeg vil gerne have omskrevet denne kode, så det kan bruges i stil med dette :
Label->Caption = CPUSage() ;
Hvor CPUSage() er den nuværende main()
Håber det er til at forstå :) Koden kommer så her (Sorry, den er lidt lang, men tog det hele med for en sikkerheds skyld)
// get number of processors in the system status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL); if (status != NO_ERROR) return;
printf("\nCPU Usage (press any key to exit): "); while(!_kbhit()) { // get new system time status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0); if (status!=NO_ERROR) return;
// get new CPU's idle time status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL); if (status != NO_ERROR) return;
// if it's a first call - skip it if (liOldIdleTime.QuadPart != 0) { // CurrentValue = NewValue - OldValue dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);
// get number of processors in the system status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL); if (status != NO_ERROR) { //printf("*error* SysBaseInfo\n"); return -1; }
for(int i=0;i<2;i++) { // get new system time status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0); if(status!=NO_ERROR) { //printf("*error* SysTimeInf\n"); return -1; }
// get new CPU's idle time status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL); if(status != NO_ERROR) { //printf("*error* SysPerfInfo\n"); return -1; }
// if it's a first call - skip it if (liOldIdleTime.QuadPart != 0) { // CurrentValue = NewValue - OldValue dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);
nej, sådan kan du ikke bruge det..! jeg har en ide om at du måske bruger c++ builder ? CPU er et tekstfelt ? Caption sætter teksten ? prøv: CPU->Caption = getCpuLoad_winnt();
eller måske: char buffer[5]; itoa(getCpuLoad_winnt(), buffer, 10); CPU->Caption = buffer;
Tænkte jeg nok, synes heller ikke printf passede ind der :)
Dine antagelser er korrekte, og nu virker det sørme også :)
Takker mange gange for den hurtige hjælp
Synes godt om
Ny brugerNybegynder
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.