minicrispie: Programmgeschwindigkeit anpassen (C, Allegro)

Hallo,

zurzeit programmiere ich ein Programm, welches sich der Geschwindigkeit des Rechners anpassen soll:
Folgender aufbau:

#include <allegro.h>  
  
int main()  
{  
    [...] //Allegro starten  
  
    while(!schleife)  
    {  
       [...] //Aktionen  
    }  
  
    allegro_exit();  
    return 0;  
}  
END_OF_MAIN();

Wie man hoffentlich erkennen kan, ist dies ein C-Programm unter der Verwendung von Allegro(Sehr, sehr startk gekürzt).
Nun ist es aber so, das, je nach Eigenschaften des PC's die Geschwindigkeit der while-Schleife variiert.
Kann man das irgendwie beheben? Irgendwie ein sleep(...) einbauen oder eine Schleife?
Die while soll also, egal auf welchem Rechner, mit der gleichen Geschwindigkeit durchrattern.
Könnt ihr mir da weiterhelfen?

MfG. Christoph Ludwig

--
Wo die Sprache aufhört, fängt die Musik an...
Selfcode:  sh:) fo:) ch:° rl:( br:^ n4:} ie:{ mo:} va:) js:| de:] zu:) fl:( ss:| ls:~
Go to this
  1. Hi there,

    Die while soll also, egal auf welchem Rechner, mit der gleichen Geschwindigkeit durchrattern.

    Lass beim Start eine definierte Schleife durchlaufen und "eiche" so die Rechnergeschwindigkeit. Das ist ein durchaus übliches Verfahren und mit ein Grund, warum uralte Programme oft nicht mehr starten (weil irgendwo durch die heutigen schnellen Rechner eine Division durch Null auftritt...;))

    1. Moin!

      »» Die while soll also, egal auf welchem Rechner, mit der gleichen Geschwindigkeit durchrattern.

      Lass beim Start eine definierte Schleife durchlaufen und "eiche" so die Rechnergeschwindigkeit. Das ist ein durchaus übliches Verfahren und mit ein Grund, warum uralte Programme oft nicht mehr starten (weil irgendwo durch die heutigen schnellen Rechner eine Division durch Null auftritt...;))

      Nein. Schleifen sollen so schnell wie möglich ausgeführt werden, sie als Zeitverzögerung einzusetzen ist, pauschal gesprochen, keine sehr gute Idee.

      Wenn es darum geht, Zeitsynchronisierung herzustellen oder eine zeitliche Einheitlichkeit zu erreichen, sollte man auf die Zeitmessung des Rechners zurückgreifen.

      - Sven Rautenberg

      1. Hi there,

        Nein. Schleifen sollen so schnell wie möglich ausgeführt werden, sie als Zeitverzögerung einzusetzen ist, pauschal gesprochen, keine sehr gute Idee.

        Das kann ich so pauschal nicht stehen lassen. Es ist natürlich richtig, daß das unter DOS unproblematischer war, als in einem modernen Multitaskingenvironement, aber um festzustellen, wie schnell ein Rechner ist ist es allemal ok.

        Wenn es darum geht, Zeitsynchronisierung herzustellen oder eine zeitliche Einheitlichkeit zu erreichen, sollte man auf die Zeitmessung des Rechners zurückgreifen.

        Das hängt auch irgendwie von der Anwendung ab, was er genau damit vorhat hat uns der OP ja nicht verraten...

  2. Hello,

    diese ist nun hoffentlich der richtige Thread. Ich war schon in einem anderen gelandet ...

    Um eine zeitliche synchronisation zu erreichen, benötigst Du eher einen Trigger, als eine Schleife. Im PC-Konzept steht dafür der Userinterrupt 1Ch zur Verfügung, auf den Du dann einen Handler legen kannst. Durch Einrichtung eines passenden Semaphors (mutex) kannst Du verhindern, dass der Handler vollständig ausgeführt wird, obwohl er noch läuft.

    http://de.wikipedia.org/wiki/Semaphor_(Informatik)

    Suche in Deiner C-API nach der Möglichkeit, einen Interrupt-Handler einzurichten und zu aktivieren.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo,

      diese ist nun hoffentlich der richtige Thread. Ich war schon in einem anderen gelandet ...

      naja es passt zumindest hier rein ;)

      Um eine zeitliche synchronisation zu erreichen, benötigst Du eher einen Trigger, als eine Schleife. Im PC-Konzept steht dafür der Userinterrupt 1Ch zur Verfügung, auf den Du dann einen Handler legen kannst. Durch Einrichtung eines passenden Semaphors (mutex) kannst Du verhindern, dass der Handler vollständig ausgeführt wird, obwohl er noch läuft.

      http://de.wikipedia.org/wiki/Semaphor_(Informatik)

      Suche in Deiner C-API nach der Möglichkeit, einen Interrupt-Handler einzurichten und zu aktivieren.

      OK. Da werd ich mich mal informieren...
      danke!

      MfG. Christoph Ludwig

      --
      Wo die Sprache aufhört, fängt die Musik an...
      Selfcode:  sh:) fo:) ch:° rl:( br:^ n4:} ie:{ mo:} va:) js:| de:] zu:) fl:( ss:| ls:~
      Go to this