2013-04-29 12 views
20

Ho questo programma che stampa la differenza di tempo tra 2 diverse istanze, ma stampa in precisione di secondi. Voglio stamparlo in millisecondi e un'altra in nanosecondi.Come stampare la differenza di orario in precisione di millisecondi e nanosecondi da C in Linux?

//Prints in accuracy of seconds 

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

int main(void) 
{ 
    time_t now, later; 
    double seconds; 

    time(&now); 
    sleep(2); 

    time(&later); 
    seconds = difftime(later, now); 

    printf("%.f seconds difference", seconds); 
} 

Come posso farlo?

+1

Quale piattaforma stai? – interjay

+2

questo potrebbe aiutare: http://stackoverflow.com/questions/13610471/calculating-function-time-in-nanoseconds-in-c-code –

+0

@interjay: Scusa avrei dovuto dirlo, è Linux. compilatore gcc. – kingsmasher1

risposta

34

Leggere prima la pagina man time(7).

Quindi, è possibile utilizzare syscall clock_gettime(2) (potrebbe essere necessario collegare -lrt per ottenerlo).

Così si potrebbe provare

struct timespec tstart={0,0}, tend={0,0}; 
    clock_gettime(CLOCK_MONOTONIC, &tstart); 
    some_long_computation(); 
    clock_gettime(CLOCK_MONOTONIC, &tend); 
    printf("some_long_computation took about %.5f seconds\n", 
      ((double)tend.tv_sec + 1.0e-9*tend.tv_nsec) - 
      ((double)tstart.tv_sec + 1.0e-9*tstart.tv_nsec)); 

non si aspettano i timer hardware per avere una precisione nanosecondo, anche se danno una risoluzione di nanosecondo. E non provare a misurare durate di tempo inferiori a diversi millisecondi: l'hardware non è abbastanza fedele. Si potrebbe anche voler usare clock_getres per interrogare la risoluzione di un certo orologio.

+0

questo è vero per me. grazie mille @Basile – EsmaeelE

5

timespec_get da C11 restituisce fino a nanosecondi, arrotondato alla risoluzione dell'implementazione.

Esempio da: http://en.cppreference.com/w/c/chrono/timespec_get:

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

int main(void) 
{ 
    struct timespec ts; 
    timespec_get(&ts, TIME_UTC); 
    char buff[100]; 
    strftime(buff, sizeof buff, "%D %T", gmtime(&ts.tv_sec)); 
    printf("Current time: %s.%09ld UTC\n", buff, ts.tv_nsec); 
} 

uscita:

Current time: 02/18/15 14:34:03.048508855 UTC 

Maggiori dettagli qui: https://stackoverflow.com/a/36095407/895245

Problemi correlati