PDA

Visualizza la versione completa : [C] Implementare un cronometro


Vincent
11-11-2006, 00:17
Si può realizzare un cronometro in C, con la libreria time.h?

Per cronometro intendo hh:mm:ss
con i secondi che si incrementano ed ogni 60 si incrementa il minuto, ed ogni 60 minuti si incrementano le ore...etc, ovviamente a tempo di esecuzione, cioè devo comunque vedere a schermo il tempo che passa....

Se si può fare, c'è qualcuno che mi delucida su come impostare l'algoritmo ( o programma )?

UltraBeginner
11-11-2006, 10:57
Si puo realizzare, basta che sfrutti le funzioni della librearia time.h. Ad esempio con questa semplice funzioncina che ho preso pari pari dal C refernce puoi impostare l attesa a quanto vuoi.

void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLK_TCK ;
while (clock() < endwait) {}
}

nel tuo caso gli passerai il valore 1 cosi attende un secondo. Dopo di che con questo "mattoncino" puoi implemetare il tuo cronometro con un po di while e di if.
Queste sono le linee guida credo, poi tieni conto che sono sveglio da 1 ora.... :D

saluti!

Vincent
11-11-2006, 17:19
grazie per la risposta! sei stato gentilissimo!

Ora mi chiedo una cosa, se volessi implementare un cronometro, e per esempio stampare il tempo che passa, ma nello stesso tempo permettere al programma di eseguire altre operazioni...tipo:


ho una cosa del genere:



Cronometro: 00:00:01

Menu
1) Inserisci elemento in Lista
2) Visualizza lista
3) Svuota Lista

permettendo poi all'utente di uscire da programma quando vuole...

ho scritto questo piccolo programmino sulla base della tua funzione:




#include <time.h>
#include <stdlib.h>
#include <stdio.h>

void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLK_TCK ;
while (clock() < endwait) {}
}

int main()
{
int i=0;
do
{
system("CLS");
printf("%d",i);
wait( 1 );
i++;
}
while(i<=60);
}



Questo mi stampa a video un cronometro di secondi, quando arriva a 60 esce...

ok ma se volessi inserire nel main qualche altra istruzione questa non sarà eseguita fin quando non finisce il ciclo do-while...

Non so se sono stato chiaro, il problema è questo, faccio il cronometro.

Come posso utilizzarlo includendolo nel mio programma, per esempio in alto al menu?

Vincent
11-11-2006, 17:31
#include <time.h>
#include <stdlib.h>
#include <stdio.h>

void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLK_TCK ;
while (clock() < endwait) {}
}

int main()
{
int Ore=0,
Minuti=0,
Secondi=0;
for( ; ; )
{
system("CLS");
printf("%2.2d:%2.2d:%2.2d",Ore, Minuti, Secondi);

do
{
system("CLS");
printf("%2.2d:%2.2d:%2.2d",Ore, Minuti, Secondi);

do
{
system("CLS");
printf("%2.2d:%2.2d:%2.2d",Ore, Minuti, Secondi);
wait( 1 );
Secondi++;
}
while(Secondi<60);
Secondi=0;
Minuti++;
}
while(Minuti<60);
Minuti=0;
Ore++;
}
}



Ecco il cronometro finito...

resta sempre il problema che, si ho fatto il cronometro, ma non lo posso utilizzare nel mio programma, perchè non uscendo più dal for ovviamente, non passa alle istruzioni successive.

Non esiste un modo per ovviare al problema?

Samuele_70
11-11-2006, 18:15
C'è un problema con


...
while (clock() < endwait) {}
...

Questa soluzione occupa quasi interamente la CPU, per non 'fare niente' (attende il trascorrere del tempo).
E rallenta tutto il sistema :rollo:

Il tuo programma è per sistemi windows ?

Vincent
11-11-2006, 18:16
si!

Samuele_70
11-11-2006, 18:21
Allora è meglio se fai così :


#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
int Ore=0, Minuti=0, Secondi=0;
printf("\n\n\n");
for( ; ; )
{
do
{
do
{
printf("\r TIME %02d:%02d:%02d ", Ore, Minuti, Secondi);
Sleep(1000);
Secondi++;
}
while(Secondi<60);
Secondi=0;
Minuti++;
}
while(Minuti<60);
Minuti=0;
Ore++;
}
}

Per renderti conto della differenza, guarda nel task-manager come si riduce drasticamente
l'utilizzo della cpu, grazie all'apposita funzione Sleep(ms).

Vincent
11-11-2006, 18:24
grazie mille!

Ma il mio problema è un altro!

Come posso usare il cronometro in un mio programma?

Voglio dire, come posso far apparire il cronometro in alto alla console, e nello stesso tempo eseguire il mio programma di gestione di una Lista?

Samuele_70
11-11-2006, 18:42
Non ti funziona più il tasto cerca del forum ? :D
http://forum.html.it/forum/showthread.php?s=&threadid=774876&highlight=cronometrare
http://forum.html.it/forum/showthread.php?s=&threadid=1036215&highlight=tempo+esecuzione
http://forum.html.it/forum/showthread.php?s=&threadid=1031556&highlight=tempo+esecuzione
http://forum.html.it/forum/showthread.php?s=&threadid=954822&highlight=tempo+esecuzione
http://forum.html.it/forum/showthread.php?s=&threadid=821822&highlight=tempo+esecuzione
Se ho ben capito le tue necessità, trovarai una soluzione.

Vincent
11-11-2006, 18:55
Originariamente inviato da Samuele_70
Non ti funziona più il tasto cerca del forum ? :D
http://forum.html.it/forum/showthread.php?s=&threadid=774876&highlight=cronometrare
http://forum.html.it/forum/showthread.php?s=&threadid=1036215&highlight=tempo+esecuzione
http://forum.html.it/forum/showthread.php?s=&threadid=1031556&highlight=tempo+esecuzione
http://forum.html.it/forum/showthread.php?s=&threadid=954822&highlight=tempo+esecuzione
http://forum.html.it/forum/showthread.php?s=&threadid=821822&highlight=tempo+esecuzione
Se ho ben capito le tue necessità, trovarai una soluzione.

Non capisco a che mi serve il tempo di esecuzione per risolvere il mio problema...?

Loading