Получение времени в миллисекундах

Я предпочитаю обработку исключений, обсужденную в этой статье. Это приводит к чистому коду и избегает явного создания/удаления объектов только к исключениям процессов. http://www.informit.com/articles/article.aspx?p=373339

12
задан unwind 7 September 2009 в 08:08
поделиться

4 ответа

Чтобы иметь точность до миллисекунд, вы должны использовать системные вызовы, специфичные для вашей ОС.

В Linux вы можете использовать

#include <sys/time.h>

timeval tv;
gettimeofday(&tv, 0);
// then convert struct tv to your needed ms precision

timeval с точностью до микросекунд.

В Windows вы можете можно использовать:

#include <Windows.h>

SYSTEMTIME st;
GetSystemTime(&st);
// then convert st to your precision needs

Конечно, вы можете использовать Boost , чтобы сделать это за вас :)

21
ответ дан 2 December 2019 в 03:16
поделиться

Вам нужен таймер с более высоким разрешением для захвата миллисекунд. Попробуйте следующее:

int cloc = clock();
//do something that takes a few milliseconds
cout << (clock() - cloc) << endl;

Это, конечно, зависит от вашей ОС.

4
ответ дан 2 December 2019 в 03:16
поделиться

Таймеры с высоким разрешением обычно - это gettimeofday на платформах в стиле Linux и QueryPerformanceCounter в Windows.

Вы должны знать, что определение продолжительности одной операции (даже с таймером с высоким разрешением) не даст точных результатов. Слишком много случайных факторов. Чтобы получить надежную информацию о времени, вы должны запустить задачу, рассчитанную по времени, в цикле и вычислить среднее время выполнения задачи. Для этого типа синхронизации должно быть достаточно функции clock ().

2
ответ дан 2 December 2019 в 03:16
поделиться

Если вы не хотите использовать какой-либо код, специфичный для ОС, вы можете использовать пакет ACE, который предоставляет функцию ACE_OS :: gettimeofday для большинства стандартных операционных систем. Например:

ACE_Time_Value startTime = ACE_OS::gettimeofday();

do_something();

ACE_Time_Value endTime = ACE_OS::gettimeofday();

cout << "Elapsed time: " << (endTime.sec() - startTime.sec()) << " seconds and " << double(endTime.usec() - startTime.usec()) / 1000 << " milliseconds." << endl;

Этот код будет работать независимо от вашей ОС (если ACE поддерживает эту ОС).

2
ответ дан 2 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: