2012-04-11 15 views
6

¿Cuál es la equivalencia de Java System.currentTimeMillis() en C?Obtenga la hora actual, en milisegundos, en C?

+4

¿Qué sistema operativo? –

+1

Ver http://stackoverflow.com/questions/5303751/current-microsecond-time-in-c. Buenas respuestas allí. – netcoder

+1

Posible duplicado de [¿Cómo medir el tiempo en milisegundos utilizando ANSI C?] (Http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c) –

Respuesta

2

Comprobar time.h, tal vez algo así como la función gettimeofday().

Usted puede hacer algo como

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

A continuación, puede extraer tiempo al obtener los valores de now.tv_sec y now.tv_usec.

+1

no , pero

1

Existe la función time(), pero devuelve segundos, no milisegundos. Si necesita una mayor precisión, puede usar funciones específicas de la plataforma como Windows 'GetSystemTimeAsFileTime() o * nix's gettimeofday().

Si en realidad no se preocupan por la fecha y la hora, pero sólo desea cronometrar el intervalo entre dos eventos, así:

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

entonces el equivalente de C es clock(). En Windows, es más común usar GetTickCount() para este propósito.

3

En Linux y otros sistemas tipo Unix, debe usar clock_gettime(CLOCK_MONOTONIC). Si esto no está disponible (por ejemplo, Linux 2.4), puede recurrir al gettimeofday(). Este último tiene el inconveniente de verse afectado por los ajustes del reloj.

En Windows, puede usar QueryPerformanceCounter().

This code resumen de todo lo anterior en una interfaz simple que devuelve el número de milisegundos como int64_t. Tenga en cuenta que los valores en milisegundos devueltos solo están destinados al uso relativo (por ejemplo, tiempos de espera) y no son relativos a ningún tiempo en particular.

+0

'CLOCK_MONOTONIC' no es completamente equivalente a la función java, ya que la función java también se ve afectada por los ajustes del reloj de pared. Es la elección correcta para los temporizadores de intervalo, por supuesto, pero si el OP quiere un tiempo de reloj de pared no va a ayudar. – bdonlan

Cuestiones relacionadas