Salve

per ora ho creato una funzione che all'interno di un ciclo while implementa la funzione getch(), che aspetta l'input di un tasto freccia. Se il tasto viene premuto l'esecuzione del codice avanza. Il ciclo while è necessario perchè la gestione dei tasti freccia da parte di getch() mi sono accorto che è un po' particolare: la funzione restituisce 2 valori che probabilmente vengono salvati in un buffer. Alla prima esecuzione della funzione, se si preme un tasto freccia essa ritorna l'intero 224. Se poi viene richiamata, restituisce un altro intero, senza attendere la pressione di alcun tasto, che è relativo al tasto freccia in particolare precedentemente premuto.

Quindi ho scritto il seguente codice, che funziona e restituisce il valore intero del tasto freccia premuto.


codice:
int gettasto(){
    
    int i;
    bool flag = false;
    cout<< endl<<"Premi un tasto freccia"<<endl;
    int cont=0;
    while (flag==false){
cont=cont+1;
i = getch();
if (i!=224 && cont==1) {cout<<endl<<"Puoi premere solo tasti freccia"<<endl;
            cont=cont-1;}
if (cont==2) flag=true;
}
return i;}

A questo punto, però, vorrei complicare la cosa: mi servirebbe fare in modo che la funzione getch() attenda la pressione di un tasto per un certo tempo, possibilmente inferiore al secondo e che, se entro questo tempo nessun tasto viene premuto, prosegua comunque nel codice, ritornando il valore dell'ultimo tasto freccia premuto.

Per questo pensavo ad un timer, ma magari c'è qualche modo più semplice. In ogni caso, anche per il timer, non saprei come impostare il codice, perchè non saprei come fare in modo di passare oltre getch() una volta scaduto un certo intervallo di tempo.
Nel senso: ipotizziamo che un metodo di una classe timer esegua il codice postato sopra ogni secondo. Se il timer non ha una rilevanza maggiore rispetto alla funzione getch(), il programma si bloccherà nel timer aspettando la pressione del tasto. Se invece il timer ha precedenza maggiore non so se potrebbe passare oltre getch() ed eseguire le istruzioni sottostanti, oppure uscire completamente dalla funzione e restituire qualcosa di inesatto come valore ritornato.

Come potrei fare?

Grazie tante!