Timer



  • seid gegrüßt,

    mich würde interessieren, ob man in c einen timer verwenden kann.
    Beispielsweise soll eine Eingabe erst nach 5s ausgegeben werden.

    Mfg Dulfried


  • Mod

    Man kann in C alles machen, was man mit einem Computer machen kann.

    Wobei ich aber keine Ahnung habe, was du mit

    Beispielsweise soll eine Eingabe erst nach 5s ausgegeben werden.

    meinst.



  • beispielsweise das:

    printf("Nach 5 Sekunden können Sie eine Zahl eingeben");
    // jetzt sollen irgendwie 5 sekunden vergehehen und 
    // erst dann soll es weitergehen:
    printf("Sie können jetzt eingeben:");
    scanf("%d", &zahl);
    

    Ich möchte also irgendwie eine Zeitsperre haben, in der man nichts
    machen kann


  • Mod

    Absolut portable, aber unschöne (da sie massenhaft Ressourcen verbraucht) Methode:
    Aktive Warteschleife, die immer wieder die aktuelle Zeit mit einer Anfangszeit vergleicht, bis eine gewisse Differenz erreicht ist.

    Systemabhängige Methode (die man aber mit ein paar defines auch portabel machen kann), die aber erheblich besser für die Hardware ist:
    sleep-Funktion des Betriebssystems nutzen.

    PS: Wobei noch zu klären ist, was du mit "man nichts machen kann" meinst. Während des sleeps läuft das Programm nicht weiter, das heißt erst nach 5 Sekunden werden das nächste printf und das scanf ausgeführt. Viele Anfänger meinen, scanf bedeute so etwas wie "lese von der Tastatur". Tut es aber nicht. scanf heißt "lese aus (dem Filedeskriptor) stdin". C-Programme dieser Art laufen oft in einer Umgebung, beispielsweise einem Terminal. Das Terminal kümmert überhaupt nicht, was das C-Programm macht. Wenn dein Programm schläft, kann der Anwender trotzdem schon Eingaben im Terminal machen. Diese werden dann vom Terminal nach stdin des C-Programms geschrieben. Dieses wertet die Eingaben dann eben erst nach 5 Sekunden aus. Zwischendurch verbleiben sie dann eben in irgendeinem Zwischenpuffer.

    Wenn dein Programm absolut blockieren soll, muss es bessere Kontrolle über seine Umgebung haben. Das heißt, du musst entweder direkt die Methoden des Betriebssystems benutzen, um Nutzereingaben zu holen (und hoffen, dass das OS keine Puffer hat oder diese abschaltbar sind) oder ein fertiges UI-Framework nutzen (welches dann intern die Systemfunktionen nutzt, aber eventuell etwas komfortabler nutzbar ist), das dir dies erlaubt. Dann kannst dein Programm wirklich ins Koma legen und sämtliche Eingaben komplett ignorieren. Außer dem Aufwecksignal des OS; das solltest du besser nicht ignorieren 😉 .


Anmelden zum Antworten