java nanoTime против C ++ наносекунд - PullRequest
0 голосов
/ 19 марта 2020

Я хотел бы напечатать nanotimes из двух языков и сравнить значение.

JAVA код

long nano_startTime = System.nanoTime();
System.out.println(nano_startTime);

C ++ код

system_clock::time_point begin = system_clock::now();
auto since_epoch = begin.time_since_epoch(); // get the duration since epoch
std::cout << std::to_string(duration_cast<nanoseconds>(since_epoch).count()) << std::endl;

Я ожидаю, что результаты будут эквивалентны, но результаты отличаются ...!

Результаты

JAVA: 4459739378141 
C++   1584649009920663623

Кстати: Если я использую миллисекунды, результаты эквивалентны. Но мне требуются более точные данные о времени, и, к сожалению, микросекунд нет в java.

Может кто-нибудь мне помочь? Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 марта 2020

Чтение Javado c из System.nanoTime() (выделение добавлено):

Этот метод может использоваться только для измерения прошедшего времени и не связан с другими Понятие системы или время настенных часов. Возвращаемое значение представляет наносекунды с некоторого фиксированного, но произвольного времени начала (возможно, в будущем, поэтому значения могут быть отрицательными). Один и тот же источник используется всеми вызовами этого метода в экземпляре Java виртуальной машины; другие экземпляры виртуальной машины, вероятно, будут использовать другое происхождение.

С другой стороны, в вашем коде C ++ since_epoch - это время, ну, начиная с эпохи (предполагая, что метод не был назван капризно) ; вы также можете проверить его документацию).

И System.currentTimeMillis() возвращает:

разницу, измеряемую в миллисекундах, между текущим временем и полночью, 1 января 1970 г. UT C.

Так что , что также возвращает время начиная с эпохи.

Документация - хорошее место для начала, чтобы понять поведение методов.

0 голосов
/ 20 марта 2020

Мне удалось получить значение с помощью Java TimeUnit toNanos

TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis())
...