fahrzeug-simulation: > zeitlich begrenzten aufruf mit taste unterbrechen.
-
hi,
info: ich programmiere in QT unter win10.
das programm besteht aus folgenden dateien: veh.h, veh.cpp, state.h, state.cpp, main.cpp
ausgabe auf console.
hier ein auszug aus state.cpp:
enum State{ OFF_STATE = 0, //auch ohne = 0 NEUTRAL_STATE = 1, ACCEL_STATE = 2, DECEL_STATE = 3, MOBILE_STATE = 4 }; static State state = OFF_STATE; void processEvent(char driverInput){ switch (state) { case 0://OFF_STATE if (driverInput == 'b') state = NEUTRAL_STATE; break; case 1://NEUTRAL_STATE engineNeutral(); // engineNeutral() in veh.cpp if (driverInput == 'a') state = ACCEL_STATE; if (driverInput == 'd') state = DECEL_STATE; if (driverInput == 'e') state = OFF_STATE; if (driverInput == 'h') state = MOBILE_STATE; break; case 4://MOBILE_STATE wait(); state = NEUTRAL_STATE; if (driverInput == 'h') state = NEUTRAL_STATE; ...
nun wollte ich einen case (STATE), nennen wir ihn mal MOBILE_STATE programmieren, der nur im NEUTRAL_STATE aktivierbar ist, 5 sekunden lang läuft (mit Ausgabe "MOBILE_STATE") und danach wieder in NEUTRAL_STATE springt.
(Das funktioniert alles wunderbar mit Sleep() &/ for() die mit Sleep() bis 5 zählt etc. -> wait() )ABER: wie kann ich den aufruf WÄHREND der 5 sekunden mit der taste 'h' direkt beenden? mit Sleep(1000) setzt der PC ja einfach ne sekunde aus und nebenbei wird nichts gemacht.
also irgendwie irgendwo die zeit zählen?!
ich nehme stark an
#include <time.h>
muss her.
Bitte keine komplettlösungen, nur ansätze.
vielen dank vorab.
grüße
-
Vergiss Sleep wenn es um solche Dinge geht.
Also speicherst du beim neuen status noch so eine art timestamp mit und guckst dann beim aktualisieren, ob die x sekunden schon vorbei sind oder nicht.
Der header heißtctime
http://www.cplusplus.com/reference/ctime/
time und difftime klingt nicht ganz unpassend.natürlich kannst du in deiner game/...-schleife ein sleep() machen, solltest dich aber nirgendwo darauf verlassen.