Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > время выполнения алгоритма


Автор: Fr3dd0 2.6.2011, 02:17
Как в С++ вымерить время выполнения алгоритма с точностью до миллисекунды?

Автор: RastaDja 2.6.2011, 08:19
Алгоритм простой: записываешь системное время до вызова функции, потом после, находишь разницу,- это и будет время выполнения.
Код

SYSTEMTIME StartTime;
GetSystemTime(&StartTime);        // Вот это значение времени до вызова функции

yourFunction();                            // это функция которую проверяешь

SYSTEMTIME EndTime;
GetSystemTime(&EndTime);       // Вот это значение времени после вызова функции

WORD workTime = EndTime.wMilliseconds - StartTime.wMilliseconds            // вот измериное время


также можешь применять это внутри функции.

Автор: Fr3dd0 2.6.2011, 10:43
Все работает, все прекрасно, но нужно измерять в секундах, с точностью до миллисекунды (x.yy с), а не просто в миллисекундах (xyy мс)

Автор: RastaDja 2.6.2011, 13:22
Цитата(Fr3dd0 @  2.6.2011,  11:43 Найти цитируемый пост)
Все работает, все прекрасно, но нужно измерять в секундах, с точностью до миллисекунды (x.yy с), а не просто в миллисекундах (xyy мс) 

Тогда есть два варианта:
    1. Погуглить SYSTEMTIME, он выдает время в любом формате.
    2. 1000 миллисекунд=1 секунда - думаю дальше понятно что делать.

Автор: volatile 2.6.2011, 23:48
В винде есть очень точные функции для измерения временных интервалов, вплоть до микросекунд

QueryPerformanceCounter();
QueryPerformanceFrequency();

Я даже когда-то с этими функциями написал небольшой класс секундомера для измерения временных интервалов.
(потом переделал на __rdtsc он более быстрый, но измеряет не в секундах а в тиках процессора.)

если хотите поищу свой старый вариант.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)