Zum Inhalt springen
  • 0

C - Eingabe mit Zeitlimit


Gast Silent

Frage

Hallo.

Ich bin aktuell am üben in der Sprache C.

Ich habe hier eine Frage zu einer Aufgabe, zu der ich keine Lösung finde, auch nicht mit Google.

Simpel gehalten: 
Dem Nutzer werden 2 Zahlen angezeigt, die random generiert werden. 

Der Nutzer soll das Ergebnis der Addition dieser zwei Zahlen innerhalb von 5 Sekunden eingeben.

Wenn er innerhalb der 5 Sekunden nichts eingibt, dann fährt das Programm fort, ohne auf seine Eingabe zu warten.

Leider ist mir nicht bekannt, wie ich auf eine Eingabe warten kann und gleichzeitig eine Zeit laufen lasse, da dies zwei Vorgänge gleichzeitig sind.

Kann mir jemand behilflich sein? 

Link zu diesem Kommentar
Auf anderen Seiten teilen

6 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Wenn ich das richtig verstanden habe, dann wartet der Befehl sleep eine bestimmte Anzahl an Sekunden. 

Das würde bedeuten, dass der Nutzer nicht die Möglichkeit hat, eine Eingabe zu tippen. 

Er würde also angezeigt bekommen: "50 + 44 =      ", und dann wartet das Programm 5 Sekunden lang, ohne das der Nutzer sein Ergebnis prüfen lassen kann. 

Oder habe ich noch etwas falsch verstanden bei sleep? :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Hey,

der sleep() - Befehl bewirkt, das der aktuell aktive Thread für die als Parameter übergebene Zeit in Millisekunden pausiert wird. Der Grundgedanke mit dem 5 Sekunden warten wäre damit erfüllt, dies wird dann aber direkt zum nächsten Problem führen - während der aktuelle Prozess pausiert ist, nimmt er natürlich auch keine Benutzereingaben mehr für diese Zeit an und deine Anwendung hängt sich auf.

An der Nutzung von einem weiteren Thread, Stichpunkt Multithreading wirst du nicht vorbeikommen. Dieser eigenständige Watcher-Thread hat dann die Aufgabe regelmäßig zu überwachen ob der Benutzer schon etwas eingeben hat und seine Eingabe bestätigt ist (z. B. durch Enter). Hier im Watcher-Thread wäre auch das vorher vorgeschlagene sleep() nicht verkehrt (du willst ja nicht dauerhaft Prozessorzeit beanspruchen um zu sehen, ob es schon Eingaben gibt, so eine Überprüfung kann man auch alle x Millisekunden durchführen). Der Watcher-Thread könnte dann also vorzeitig beendet werden nachdem der Benutzer seine Eingabe bestätigt hat oder eben solange laufen bis der Timeout erreicht wurde, dannach kann der Watcher-Thread sich wieder mit dem Haupt-Thread synchronisieren und du kannst die Eingabe auswerten. Hoffe, das ist als Ansatz hilfreich :)

 

 

Bearbeitet von JustALurker
Edit: Ergänzung
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Ich bedanke mich schon einmal für die Antworten. :)

Leider ist mir nicht bekannt, wie ich Multithreading benutze. Kannst du mir dazu noch ein kurzes Anwendungsbeispiel geben mit 2 Zahlen, welche addiert werden und man dort 5 Sekunden Zeit für die Antwort einräumt?
Oder wäre das zu viel Aufwand? Kenne mich leider mit Multithreading nicht aus, daher weiß ich nicht wie viel Aufwand möglicherweise dahinter steckt. ^^ 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Ein Anwendungsbeispiel will ich dir noch nicht direkt geben, aber die folgenden Links sollte dir die Infos vermitteln die du brauchst, um das Problem zu lösen:

- https://en.wikipedia.org/wiki/POSIX_Threads
- https://www.geeksforgeeks.org/multithreading-c-2/
- https://dev.to/quantumsheep/basics-of-multithreading-in-c-4pam

Wenn du danach noch Fragen oder Unklarheiten dazu hast, helfe ich dir aber natürlich gern weiter. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...