2012-04-11 19 views
6

Qual è l'equivalenza di Java System.currentTimeMillis() in C?Ottieni l'ora corrente, in millisecondi, in C?

+4

Quale sistema operativo? –

+1

Vedere http://stackoverflow.com/questions/5303751/current-microsecond-time-in-c. Buone risposte lì. – netcoder

+1

Possibile duplicato di [Come misurare il tempo in millisecondi usando ANSI C?] (Http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c) –

risposta

2

Controllare time.h, forse qualcosa di simile alla funzione di gettimeofday().

Si può fare qualcosa di simile

struct timeval now; 
gettimeofday(&now, NULL); 

Quindi è possibile estrarre il tempo ottenendo i valori da now.tv_sec e now.tv_usec.

+1

non , ma

1

C'è la funzione time(), ma restituisce secondi, non millisecondi. Se è necessaria una maggiore precisione, è possibile utilizzare funzioni specifiche della piattaforma come Windows 'GetSystemTimeAsFileTime() o * nix gettimeofday().

Se in realtà non interessa la data e l'ora, ma desidera solo per cronometrare l'intervallo tra due eventi, in questo modo:

long time1 = System.currentTimeMillis(); 
// ... do something that takes a while ... 
long time2 = System.currentTimeMillis(); 
long elapsedMS = time2 - time1; 

poi la C equivalente è clock(). Su Windows, è più comune usare GetTickCount() per questo scopo.

3

Su Linux e altri sistemi simili a Unix, è necessario utilizzare clock_gettime(CLOCK_MONOTONIC). Se questo non è disponibile (ad es. Linux 2.4), puoi tornare a gettimeofday(). Quest'ultimo ha l'inconveniente di essere influenzato dalle regolazioni dell'orologio.

Su Windows, è possibile utilizzare QueryPerformanceCounter().

This code di miei estratti tutto quanto sopra in una semplice interfaccia che restituisce il numero di millisecondi come int64_t. Si noti che i valori di millisecondo restituiti sono intesi solo per uso relativo (ad es. Timeout) e non sono relativi a un particolare momento.

+0

'CLOCK_MONOTONIC' non è del tutto equivalente alla funzione java, poiché anche la funzione java è influenzata dalle regolazioni del wallclock. È la scelta giusta per i timer di intervallo, ovviamente, ma se l'OP vuole un tempo di wallclock non sarà di aiuto. – bdonlan

Problemi correlati