Fügen Sie ein Timeout für getchar()
Ich muss noch ein timeout-Funktion getchar() in meinem Programm.
Was muss ich tun, wenn mein Programm erreicht die Anweisung getchar(), es wird nur darauf warten, für eine gewisse Zeit für den Benutzer nach einem Tastendruck, und wenn der Benutzer nicht machen, ein Tastendruck innerhalb der angegebenen Frist, wird das Programm "überspringen" der getchar()?
Das Betriebssystem unterstützt nicht die conio.h-Bibliothek so kbhit ist keine option.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist in der Regel erreicht, indem
select()
aufstdin
. Eine andere Lösung wäre mitalarm()
und eine dummy-SIGALRM-handler unterbrechen dengetchar()
aufrufen (funktioniert nur auf POSIX-Systemen wenn).alarm(duration);
vor Ihrergetchar()
nennen. Auch, installieren Sie eine dummy-sighandler mitsignal(SIGALRM, your_handler_func);
so das alarm-signal nicht zu Ihrem Programm.Wie Sie einen timeout beim Lesen von `stdin`
Ich fand diese Frage ist hilfreich.
Andere Methode ist die Verwendung von multithreading.
Wenn Sie mit c++11, können Sie Gebrauch machen von
condition_variable::wait_for()
als ein timer-thread. Und die original getchar() blockiert in einem anderen thread.Hier ist ein Beispiel:
Wenn es einen Tastendruck, den Haupt-thread benachrichtigt, der worker-thread.