Jump to content
  • 0
Melde dich an, um diesem Inhalt zu folgen  
Gast Silent

C - Eingabe mit Zeitlimit

Frage

Gast Silent

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? 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

6 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Gast Silent

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

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 0
Gast Silent

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. ^^ 

Diesen Beitrag teilen


Link zum Beitrag
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. :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2020 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

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

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung