PDA

Visualizza la versione completa : [C] Conteggio del tempo


RIACK
04-01-2011, 01:05
Conoscete qualche istruzioni che consente di contare il tempo che trascorre?
Mi spiego meglio, esponendo il mio problema:
Devo fare inserire all'utente un parola, entro un tot di minuti.
Purtroppo non finisce qu, perch questa parola non la leggo mediante scanf(), ma la leggo lettera dopo lettera, mediante getch().
Qualcuno mi saprebbe aiutare?



P.S. Ho una idea ma non so se esiste la funzione per realizzarla:
magari potrei utilizzare una certa funzione che conta quanto tempo passa fra l'esecuzione della riga 7 e l'esecuzione della riga 20......se poi il tempo maggiore di quello che voglio concedere, ignoro l'inserimento (ma cmq lascio tutto il tempo che vuole l'utente, per inserire la parola).

MItaly
04-01-2011, 01:23
Con che precisione ti serve la misura? La precisione di un secondo va bene?

RIACK
04-01-2011, 02:51
ma si....

Tigermat
04-01-2011, 07:09
Io userei un thread che ogni secondo controlla se stato inserito qualcosa, se dopo un tot di tempo non viene inserito niente visualizza una finestra (o comunque un messaggio) con scritto "Tempo Scaduto"!!

MItaly
04-01-2011, 11:48
Per misurare differenze di tempo puoi usare time(NULL) di <time.h>.

ramy89
04-01-2011, 15:26
Non penso che il flusso di istruzioni si blocchi mentri usi la getch.
Io per fermare il tempo ho sempre creato un while:



time_t t1,t2;
t1=time(NULL);
t2=t1+5;
while(t1<t2)
t2=time(NULL);


Dovrebbe fermarsi per tre secondi.
Se nel ciclo ci inserisi anche la getch dovrebbe andare.
Un esempio col la getchar:



while(getchar()!=10&&t1<t2)
{
t2=time(NULL);
}


Non testato,penso dovrebbe funzionare.
Il ciclo finisce se il tempo scade oppure se l' utente fa in tempo a inserire la parola.

RIACK
04-01-2011, 23:24
ho capito come utilizzare la funzione time(), e l'idea mi piace......ora per mi chiedo se c' un modo (senza fare cicli), per far fisualizzare un countdown all'utente (col ciclo lo so fare, ma per i motivi citati nel primo post, non posso utilizzare un altro ciclo e come capirete, neanche il cilo che uso per il getch()).

ramy89
04-01-2011, 23:42
Sisi,limitare il tempo di input.
Il primo codice che ho scritto fa aspettare 5 secondi.
va integrato nell' input,adesso non ho sperimentato,ma tu essendoci un ciclo while come questo:


while(c=getchar()!=10)
{
....
}

per forzare l' uscita dal ciclo aggiungi la condizione che t2=t1.
t1 cambia sempre,durante il ciclo prendi il tempo con t1=time(NULL),mentre t2 lo prendi prima del ciclo e decidi di quanti secondi farlo essere.

MItaly
04-01-2011, 23:43
La getc bloccante, per cui dovresti avere un thread separato per la gestione del countdown, tuttavia non so quanto sia una buona idea usare la stessa console con output da due thread diversi. Forse ti devi reimplementare la getch tramite funzioni non bloccanti, che dipendono dalla piattaforma su cui stai lavorando.

ramy89
05-01-2011, 01:48
In effetti il countdown potrebbe essere gestito da un altro processo secondo me anche facilmente.
Con la funzione CreateProcess di windows.h dovresti create un processo che mostra il countdown,e il processo si ferma quando il countdown finisce.
Compare una finestra piccola,se ho tempo poi provo a studiarci sopra che m' incuriosisce.

Loading