2012-04-11 9 views
6

Какова эквивалентность Java System.currentTimeMillis() в C?Получить текущее время, в миллисекундах, в C?

+4

Какая операционная система? –

+1

См. Http://stackoverflow.com/questions/5303751/current-microsecond-time-in-c. Хорошие ответы там. – netcoder

+1

Возможный дубликат [Как измерить время в миллисекундах с использованием ANSI C?] (Http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c) –

ответ

2

Check time.h, возможно, что-то вроде функции gettimeofday().

Вы можете сделать что-то вроде

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

Затем вы можете извлечь время, получая значения от now.tv_sec и now.tv_usec.

+1

не , но

1

Функция time(), но она возвращает секунды, а не миллисекунды. Если вам нужна большая точность, вы можете использовать определенные для платформы функции, такие как Windows 'GetSystemTimeAsFileTime() или * nix's gettimeofday().

Если вы на самом деле не заботиться о дате и времени, но просто хочу приурочить интервал между двумя событиями, например:

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

то C эквивалент clock(). В Windows для этой цели чаще используется GetTickCount().

3

В Linux и других Unix-подобных системах вы должны использовать clock_gettime(CLOCK_MONOTONIC). Если это не доступно (например, Linux 2.4), вы можете вернуться к gettimeofday(). У последнего есть недостаток, связанный с изменением часов.

В Windows вы можете использовать QueryPerformanceCounter().

This code аннотаций всех приведенных выше в простой интерфейс, который возвращает число миллисекунд как int64_t. Обратите внимание, что возвращаемые значения миллисекунд предназначены только для относительного использования (например, тайм-аутов) и не относятся к какому-либо конкретному времени.

+0

'CLOCK_MONOTONIC' не совсем эквивалентен функции java, так как функция java также зависит от настроек Wallclock. Разумеется, это правильный выбор для интервальных таймеров, но если OP хочет время настенного закрытия, это не поможет. – bdonlan

Смежные вопросы