PDA

View Full Version : [C] contare il tempo trascorso da un determinato istante


gepeppe
13-06-2008, 17:14
Salve, il mio problema è questo. Dovrei creare una funzione che, dopo aver passato un intero S che rappresentano i secondi che il programma dovrebbe stare in esecuzione , mi debba restituire (o stampare a video), ogni volta che la chiamo:
1) il tempo trascorso dall'avvio del programma a quando la chiamo
2) il tempo restante alla fine del programma...cioè se S = 100 secondi, e io la chiamo dopo 20 secondi, la funzione dovrebbe restituire o stampare a viedo 80 secondi.

Il problema è che non sò come gestire la seconda parte, visto che per la prima credo di utilizzare la libreria ctime, com la funzione difftime(start stop).

Qualche suggerimento??

grazie

Tarkifos
13-06-2008, 17:26
Non so se ho capito bene, ma tu sei in grado di conoscere da quanto tempo è in esecuzione il programma e quanto deve restare attivo giusto?

Se fai la differenza tra il tempo che deve restare attivo e il tempo che è in esecuzione il programma non risolvi il problema?

gepeppe
13-06-2008, 17:36
Non so se ho capito bene, ma tu sei in grado di conoscere da quanto tempo è in esecuzione il programma e quanto deve restare attivo giusto?

Se fai la differenza tra il tempo che deve restare attivo e il tempo che è in esecuzione il programma non risolvi il problema?

beh, io dovrei fare in modo che il programma ersti in esecuzione per "S" secondi (anche 500 secondi, non ha importanza). La cosa che conta è che io devo sapere chiamando una funzione, da quanto tempo è in esecuzione il programma (che logicamente dovrebbe essere il risultato dell'operazione "Tempo di start - Tempo in cui chiamo la funzione"), ed il tempo che manca da quando chiamo la funzione alla fine del programma (Cioè S - il tempo trascorso).

Spero di essere stato chiaro......ma non è semplice :(

Tarkifos
13-06-2008, 17:43
La cosa che conta è che io devo sapere chiamando una funzione, da quanto tempo è in esecuzione il programma (che logicamente dovrebbe essere il risultato dell'operazione "Tempo di start - Tempo in cui chiamo la funzione")
Qua hai detto che non hai problemi perché conti di usare la funzione difftime, giusto?

ed il tempo che manca da quando chiamo la funzione alla fine del programma (Cioè S - il tempo trascorso).

E qua non sai come fare.

ho capito bene?

gepeppe
13-06-2008, 18:03
Qua hai detto che non hai problemi perché conti di usare la funzione difftime, giusto?


E qua non sai come fare.

ho capito bene?

esatti..per il primo stò apposto...posto stampare il tempo in secondi, minuti ecc....ma il problema è la seconda parte...

Tarkifos
13-06-2008, 18:18
Bene, abbiamo il tempo totale "S" e il tempo che è trascorso da quando è stato lanciato il programma che chiamiamo "T". giusto?

ora, se fai S-T ottieni il tempo che manca al termine del programma.

gepeppe
13-06-2008, 18:53
Bene, abbiamo il tempo totale "S" e il tempo che è trascorso da quando è stato lanciato il programma che chiamiamo "T". giusto?

ora, se fai S-T ottieni il tempo che manca al termine del programma.

:mbe: e C-parlando, come si fa a fare una cosa del genere??

Io ho il tempo in formati "time"....S invece è un intero...non posso sottrarli normalmente...

gepeppe
16-06-2008, 11:22
nuessun suggerimento?

Tarkifos
20-06-2008, 18:57
sì, scusa.. era un po' che non passavo di qua..
Allora.. non so nella libreria ctime, ma nella time.h la struttura tm è dichiarata così

struct tm {
int tm_sec; // Secondi: da 0 a 60.
int tm_min; // Minuti: da 0 a 59.
int tm_hour; // Ora: da 0 a 23.
int tm_mday; // Giorno del mese: da 1 a 31.
int tm_mon; // Mese dell'anno: da 0 a 11.
int tm_year; // Anno dal 1900.
int tm_wday; // Giorno della settimana: da 0 a 6
// con lo zero corrispondente alla domenica.
int tm_yday; // Giorno dell'anno: da 0 a 365.
int tm_isdst; // Ora estiva. Contiene un valore positivo
// se è in vigore l'ora estiva; zero se l'ora
// è quella «normale» ovvero quella invernale;
// un valore negativo se l'informazione non è
// disponibile.
};

Quindi alla fine sono tutti degli interi e puoi agire su quelli.
Se devi dichiarare una struttura tm:
struct tm time;

Poi se vuoi avere i secondi trascorsi dall'epoca(1 gennaio 1970) hai la funzione time():
long int secondi_epoca;
secondi_epoca=time(0);

Ora se vuoi mettere i secondi in una struttura tm per poi stamparla a schermo:
localtime_r(&secondi_epoca, &time);
printf("Ora: %d", time.tm_hour); //Stampare per esempio l'ora

Lavorando su queste cose dovresti riuscire a completare il tuo programma ;)

ciaociao