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ßt ctime
    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.


Anmelden zum Antworten