Stampare Timestamp in millisecondi

di il
10 risposte

Stampare Timestamp in millisecondi

Ciao a tutti.
Stò utilizzando visual studio 2010 e un altro software che mi serve per creare una macchina a stati.
Devo stampare gli istanti di tempo quando questi stati sono attivi e mi serve il tempo in millisecondi.
Ho già provato ad includere l'header <time.h> ed utilizzarla però mi stampa il tempo in secondi. Quindi girando in internet ho trovato questo:

include <sys/time.h>
struct timeval tv;   // see gettimeofday(2)
gettimeofday(&tv, NULL);
double t = (double) tv.tv_sec + (double) 1e-6 * tv.tv_usec; 
printf("il timestamp è %f",t);
Però quando vado a compilare mi da l'errore C1083:Cannot open include file 'sys\timee.h': No such file or directory
Avete qualche suggerimento? Sto utilizzando la funzione giusta, oppure ce ne sono altre?
Grazie

10 Risposte

  • Re: Stampare Timestamp in millisecondi

    Quell'header file e quel codice può girare solo su sistemi posix, mentre le funzioni standard del C hanno una risoluzione solo di secondi.
    Per Windows devi usare le API:
    
    
    #include <windows.h>
            ... 
    	SYSTEMTIME tm;
    	GetSystemTime(&tm);
    	cout << tm.wMilliseconds << endl;
    
    
  • Re: Stampare Timestamp in millisecondi

    La miglior gestione del tempo la si ottiene con l'api sempre che il tuo microprocessore la implementi.
  • Re: Stampare Timestamp in millisecondi

    Provo e vi faccio sapere. Comunque preferirei non avere dipendenza dal processore
  • Re: Stampare Timestamp in millisecondi

    Se non ricordo male quella API è supportata dal 486 in su.
  • Re: Stampare Timestamp in millisecondi

    Funziona perfetto.
    
    SYSTEMTIME tm;
    GetSystemTime(&tm);
    printf(" Il timestamp e' secondi: %u millisecondi %u \n",tm.wSecond,tm.wMilliseconds);
    
    Grazie
  • Re: Stampare Timestamp in millisecondi

    Si ma stai attento a mezzanotte che la zucca si trasforma...........
  • Re: Stampare Timestamp in millisecondi

    Ma se lo volessi come un unico numero (timestamp), invece di averlo Anno,Mese,Giorno,Ora,Minuto e Secondo. Esiste una funzione che me lo restituisce come numero intero(Per esempio come in JAVA).
  • Re: Stampare Timestamp in millisecondi

    Si: GetSystemTimeAsFileTime()
    
    FILETIME ft;
    GetSystemTimeAsFileTime(&ft);
    ULARGE_INTEGER ul;
    ul.HighPart = ft.dwHighDateTime;
    ul.LowPart = ft.dwLowDateTime;
    int64_t timestamp = ul.QuadPart;
    
  • Re: Stampare Timestamp in millisecondi

    Grazie
  • Re: Stampare Timestamp in millisecondi

    Scusate ancora, ma ho provato a scrivere questo codice per farmi stampare la data attuale in nanosecondi, però mi viene negativo (-275347566)
    FILETIME filetime;
    GetSystemTimeAsFileTime(&filetime);
    ULONGLONG timeATS;
    timeATS = (((ULONGLONG) filetime.dwHighDateTime) << 32) + filetime.dwLowDateTime;
    
    [b]printf("%d\n",timeATS);[/b]
    -La prima riga di codice dichiara una struttura che è forata da due locazioni di memoria di tipo DWORD, ossia contiene la parte alta e la parte bassa (Se non sbaglio DWORD è a 32 bit? Quale differenza c'è tra DWORD ed INT?Sono tutti e due a 32 bit?).
    -La seconda riga recupera la data e tempo corrente del sistema in formato UTC
    -La terza riga dichiara una variabile di tipo ULONGLONG (Se non sbaglio è a 64 bit unsigned?)
    -La quarta riga somma le due DWORD, ovvero la parte alta e la parte bassa(però non ho capito perchè usa << 32 ).
    Per stampare il la data riportata in nanosecondi devo mettere %lu e non %d?

    Correggetemi se sbaglio Grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte