tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
297
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dolphon Dolphon ist offline Mitglied Brokat
    Registriert seit
    Jun 2003
    Beiträge
    308
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    #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;
    }
     
    Leg dich mit dem Besten an, und stirb wie alle dann******

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo, füge mal in der wait-Funktion ein kurzes Sleep() mit ein:
    Code cpp:
    1
    
    while (clock() < endwait) { Sleep(10); }
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Dolphon Dolphon ist offline Mitglied Brokat
    Registriert seit
    Jun 2003
    Beiträge
    308
    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?
     
    Leg dich mit dem Besten an, und stirb wie alle dann******

  4. #4
    Avatar von _Van
    _Van _Van ist offline Mitglied Bronze
    Registriert seit
    Mar 2008
    Beiträge
    43
    Code :
    1
    
    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:
    Geändert von _Van (02.04.08 um 19:34 Uhr)
     

  5. #5
    Beichtpfarrer Beichtpfarrer ist offline Mitglied Brokat
    Registriert seit
    Jan 2004
    Ort
    Wannweil
    Beiträge
    302
    Zitat Zitat von _Van Beitrag anzeigen
    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:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     
      // 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..
     
    Noch weiter helfen jetzt nur noch google, msdn, Tutorials, Forumssuche, Eingebungen, Glück und ein wenig Hirnanstrengung.

Ähnliche Themen

  1. Leistung MySql?
    Von skee im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 04.12.07, 08:58
  2. Was ist in diesem Countdownskript falsch?
    Von MaWe4585 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 12.01.07, 16:15
  3. C4D Leistung hochschrauben
    Von PhoenixEN im Forum Cinema 4D
    Antworten: 4
    Letzter Beitrag: 12.06.05, 13:04
  4. Leistung steigern
    Von Bigbutcher im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 03.03.05, 22:18
  5. Zu wenig Leistung :(
    Von Raek im Forum Hardware
    Antworten: 5
    Letzter Beitrag: 19.06.04, 00:58