LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
LARGE_INTEGER time1;
QueryPerformanceCounter(&time1);
DoSomething();
LARGE_INTEGER time2;
QueryPerformanceCounter(&time2);
time2.QuadPart -= time1.QuadPart;
double span = (double) time2.QuadPart / freq.QuadPart;
Измерение времени выполнения..
Мне надо измерять скорость выполнения разных функций в программе и для этого таймера в милисекундах не хватает... т.е. нужно измерять в микросекундах или нано. Как это реализовать?
DWORD StartTime,EndTime;
StartTime=GetTickCount();
/*вызов функции*/
EndTime=GetTickCount();
int times=EndTime-StartTime;
Я так понимаю это число тиков процессора?
GetTickCount
Описание
function GetTickCount: Longint;
Считывает вpемя, пpошедшее с момента запуска системы.
Возвpащаемое значение
Пpошедшее вpемя (в миллисекундах).
Цитата: Mikl_Wolf
вроде бы нет. скорее всего что это время, а не количество тиков. Я использовал эту функцию что бы решить подобную проблему в своей программе. Вот что пишут про нее:
GetTickCount
Описание
function GetTickCount: Longint;
Считывает вpемя, пpошедшее с момента запуска системы.
Возвpащаемое значение
Пpошедшее вpемя (в миллисекундах).
GetTickCount
Описание
function GetTickCount: Longint;
Считывает вpемя, пpошедшее с момента запуска системы.
Возвpащаемое значение
Пpошедшее вpемя (в миллисекундах).
А теперь читаем пост аффтара еще раз (там где говорится про миллисекунды) :)
Может это "поможет":
http://rxlib.ru/forums/index.php?act=ST&f=3&t=370&
Потому, что цикл работы например сохранения в базе данных пишит что выполнен за 0 миллисекунд.
Обсуждалось сотни раз.
А как насчет потребления процессора самими этими функциями, насколько они быстры?
Есть лишь один способ это выяснить.
Естественно нужно учитывать один момент: функция (идеально) не должна давать побочных эффектов (в некоторых случаях кеширование - один из них).
Вычислить более менее точное время (+-100 нс) одного выполнения функции в наносекундах - не выйдет, нет таних функций.
QueryPerformanceCounter работает через rdtsc - подсчет тиков проца. На процесоре 1Ггц получаем 10^-9 сек.(нано) Нужна большая точность - юзай встроеный асм. Но тебе хватит с головой и примера HarryAxe. Ни один запрос не сможет отработать за менее чем 1мкс.