Gast Silent Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 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? Zitieren
0 Battlegame Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 https://stackoverflow.com/questions/10922900/is-it-possible-to-wait-a-few-seconds-before-printing-a-new-line-in-c/10923084 Vielleicht funktioniert es mit "sleep(sekunden)" Zitieren
0 Gast Silent Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 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? Zitieren
0 treffnix Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 Das hast du richtig verstanden. Sleep() hält den ganzen Thread an, blockiert also auch Benutzereingaben. Zitieren
0 JustALurker Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 (bearbeitet) 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 25. Februar 2020 von JustALurker Edit: Ergänzung Zitieren
0 Gast Silent Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 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. ^^ Zitieren
0 JustALurker Geschrieben 25. Februar 2020 Geschrieben 25. Februar 2020 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. Zitieren
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?
6 Antworten auf diese Frage
Empfohlene Beiträge
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.