100% CPU Leistung bei Countdownskript

Dolphon

Erfahrenes Mitglied
Hi,

ich habe ein kleines Countdown Skript gebastelt, was 100% Systemleistung frisst. (Bei Dualcore nur 50%).
Kann mir einer Tipps geben, wie ich dies verhindern kann?

Hier einmal das Skript:

Code:
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>


void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait) {}
}

int main (int argc, char * argv)
{
   int test=argv[0];
   int test2=argv[1]; 
   
  int m=10; 
  for(int x=0;x<m;x++)
  {
           
  printf ("Starting countdown...\n");
  for (int n=8000; n>0; n--)
  {
    printf ("%d\n",n);
    wait (1);
  }
  
  
    int y=10;
  for(int i=0;i<y;i++)
  {
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
       printf ("ausgeführt\n");
        Sleep(5000); //5 Sekunde
   }
}
  
  getch();
  return 0;
}
 
Hallo, füge mal in der wait-Funktion ein kurzes Sleep() mit ein:
C++:
while (clock() < endwait) { Sleep(10); }
Gruß
MCoder
 
Besten Dank für deine Antwort.
Jetzt ist die Systemauslastung des Skripts max. 2%.

Könntest du mir evt. auch erklären, warum dieses Sleep(10) in der While-Schleife den Fehler behebt?
 
Code:
while (clock() < endwait) {}

Eine whileschleife geht bei jedem Durchgang die If-Abfrage ab.
Da du nichts im Schleifenblock (heißt das so?) ausführen lässt
heißt das für die whileschleife das der Durchgang vorbei ist
und guckt sich wieder die If-Abfrage an. Das heißt das er nur
am Abfragen ist. Und die Funktion clock() muss bestimmt
irgendwelche Werte initialisieren, ausrechnen und returnen.
Das kostet Resourcen. Das ist so als wenn du jemanden Pausenlos
und ohne Zwischenpausen mit der Frage "Wieviel Uhr ist es?"
zumüllst und der dann immer auf die Uhr guckt um es dir zu sagen.
Dieses "auf die Uhr gucken" verbraucht Resourcen ^^

Darum hilft das Sleep(n);

Das schläft dann das Programm für n-Millisekunden ein und lässt dem
"Befragten" ein bissel Ruhe ^^

Ich hoffe ich konnte dir das irgendwie näher bringen.

edit:

Oder überhaupt richtig erklärt hab.
Schlagt mich nicht wenns falsch ist den so hab ichs verstanden D:
 
Zuletzt bearbeitet:
Schlagt mich nicht wenns falsch ist den so hab ichs verstanden D:

Quatsch, hier wird niemand geschlagen, war perfekt ; )


Besser ließe es sich aber noch machen:

C++:
  // statt

void wait ( int seconds )
{
  while (clock() < endwait) { Sleep(10); } 
}


 // Noch besser (eigtl auch sinniger denke ich)

void wait(int seconds)
{
  Sleep(seconds * 1000);
}

Also theoretisch könntest du dir die wait()-Fkt auch sparen und direkt mit Sleep() im Quelltext arbeiten.. naja, wie es dir halt besser gefällt..
 
Zurück