Verzögerung in C
Hi Leute ,
in meinem neuen projekt sollen einige Infos exakt 10 sekunden lang eingeblendet werden. Doowerweise bin ich noch anfänger und kenne deshalb den befehl noch nicht. Momentan hab ich eine lange verschachtelte schleife , die auf jedem rechner natürlich unterschiedlich lange dauert. Ich benötige sllerdings etwas präziseres, irgentein befehl wo ich mir sicher sein kann das es auf jedem rechner gleichlang dauert. Kennt einer ein solchen befehl (sleep gibt es mein ich nicht und die anderen beispiele aus dem Internet haben mich eher verwirrt) Schreibt mir am besten ein bespiel/funktion wie auch immer so das ich es einfügen kann und vllt. eine kleine erklärung damit ich es dann auch verstehe.
.
thx im vorraus
3 Antworten
Sleep(x); x steht für die Zeit in millisekunden (?). Funktioniert nur unter Windows.
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
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.
ö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...
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.
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; }
es handelt sich um ein simples anfängerprojekt um den einsatz von Zeigern , strukturen und Datein zu üben.