Verzögerung in C

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Sleep(x); x steht für die Zeit in millisekunden (?). Funktioniert nur unter Windows.

galatasaray06  08.02.2011, 21:58

Ups Frage nicht ganz gelesen, kann gelöscht werden.

0
User2432 
Fragesteller
 08.02.2011, 21:58

OHHH , ich hab das auch erst versucht , dachte aber es ist wie bei Quick Basic das die Zeit in sekunden ist und hab mich immer gewundert das es nicht funktioniert weil es gleich weiter geht.

thx

0

sleep() gibt es sehr wohl, allerdings ist das ggf. zu ungenau (nur Sekundenintervalle sind möglich). usleep() ist genauer. Beides in unistd.h definiert.

Bei beidem handelt es sich um eine Mindest-Wartezeit (kann etwas länger werden). Außerdem kann die Wartezeit durch einen Interrupt vorzeitig beendet werden, man muss also gucken, ob lange genug gewartet wurde. Üblicherweise wird zum Messen der Zeit z.B. gettimeofday() verwendet.

Wenn es auf ganz präzises Timing ankommt verwendet man POSIX-Echtzeittimer.

In deinem Fall wie gesagt einfach sleep(10) verwenden, und ggf. nochmal "nachlegen", falls das Programm durch einen Interrupt vorzeitig "geweckt" wurde.

User2432 
Fragesteller
 08.02.2011, 22:58

öhm , das verwirrt mich jetzt ein wenig , durch die Antwort oben habe ich dann sleep(10000); geschrieben und er wartet exakt 10 sekunden. Und ich musste auch nicht unistd.h includiren...

0

Du musst einen Timer bauen. Der ständig läuft und überprüft ob die 10s vergangen sind.

if(time_fkt() - start > delay) 
  tue was

Was ist das überhaupt für ein Programm? WinAPI? Spiel? MFC? Du braucht eine Programmschleife, also eine while-Schleife die ständig läuft, bis zum Beispiel die "beenden"-Taste gedrückt wird.

User2432 
Fragesteller
 08.02.2011, 23:00

es handelt sich um ein simples anfängerprojekt um den einsatz von Zeigern , strukturen und Datein zu üben.

0
gfuser9283  09.02.2011, 12:11
@User2432

du kannst zwar ein Programm mit sleep/delay -Funktionen anhalten, aber dann geht auch wirklich nichts, also auch keine Eingabe. das liegt einfach daran, dass die befehle nach einander ausgeführt werden. wenn beim ausführen slee(xx) erreicht wurde, dann bleibt das programm auch an dieser stelle stehen, bis die zeit vergangen ist. wenn du aber während der wartezeit interaktionen willst(was immer sinnvoll ist), dann brauchst du eine hauptschleife. im grunde ist es eine while schleife mit einer abfrage auf abbruchbedingung.

bool beenden = false; while(!beenden) { // mache was

if(taste zum beenden gedrückt) beenden = true; }

0