| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > как наиболее точно считать время??? |
| Автор: 46&two 21.4.2004, 19:25 | ||
| дело так: есть функция myfunction(); я хочу как можно более точно рассчитать время ее работы (имеется в виду, чистое время процесса) чем больше будет знаков после запятой, тем лучше я сейчас делаю так:
Можно ли точнее считать время???? |
| Автор: Leopard25 21.4.2004, 20:44 |
| s1=GetTickCount(); //функция s2=GetTickCount(); s4=(s2-s1); |
| Автор: Coocky 21.4.2004, 21:28 |
| В С++ есть функция подсчитывающая кол-во тактов процессора.Ща не помню,но напишу позже |
| Автор: Artiom 21.4.2004, 23:25 | ||
Разве это не есть clock()? |
| Автор: 46&two 22.4.2004, 16:21 |
| ну так что получается? что clock() - это наиболее точный вариант? |
| Автор: Leopard25 22.4.2004, 16:35 |
| Через GetTickCount() получаешь результат в милисекундах. Тебе нужно ещё точнее ? |
| Автор: 46&two 22.4.2004, 17:43 |
| конечно точнее. сотые секунды - это слишком большое зерно. ну не повторять же численный метод сто раз, особенно если его временная оценка ~O(n*n)..... тут даже тысячные - вообще говоря, не дело |
| Автор: Leopard25 22.4.2004, 17:59 |
| Вообщето мили секунды это тысячные .... |
| Автор: Дрон 22.4.2004, 19:15 | ||||||
Если пишешь для Windows, то как я уже много раз говорил:
совместно с
Дадут ИМХО лучший результат. Добавлено @ 19:25 Вот как это можно сделать:
ElapsedTime будет в секундах. Как я понял, у меня точность ~1/3500000 секунды. |
| Автор: Novich 23.4.2004, 12:40 |
| GetTickCount() не всегда дает точное значение |
| Автор: Goremika 23.4.2004, 17:41 |
| Конечно не совсем в тему, но может функцию запускать не один раз а несколько а потом получивщееся время делить на кол-во вызовов ф-ии? |
| Автор: _hunter 23.4.2004, 19:03 | ||
по-моему именно об этом и написанно |
| Автор: Дрон 23.4.2004, 20:28 |
| Кстати, в Виндах заниматься измерением времени работы с большой точностью -- плохая затея. Они ж многозадачные и всё такое. Для лучших результатов нужно поставить класс приоритета для процесса -- Realtime (реального времени). |
| Автор: 46&two 26.4.2004, 10:57 |
| to Dron: Я прогнал сравнение для твоего метода измерения скорости и с тем, что использовал раньше. В чем я не уверен: в том что QueryPerformanceCounter считает строго время процесса, а не полное время работы (т.е. с учетом времени, затраченного другими процессами). Просто сравнение показало, что, например, метод, отрабатывающий за 7 секунд, оцениваетсяQueryPerformanceCounter и сlock() c разницей в ~0.05 секунды. При этом время, рассчитанное QueryPerformanceCounter всегда немного больше времени, рассчитанного cloсk(). Не ахти как много, но все же существенно, особенно если принять во внимание то, что разница в подсчетах clock() и getTickCount() составляет не более 0.001 секунды. вот такие пироги. |
| Автор: Дрон 26.4.2004, 18:14 | ||||
| QueryPerformanceCounter считает именно полное время. Я просто не внимательно прочитал вопрос... А для времени данного процесса есть функция (по названию догадаться можно):
Какой именно параметр тебе нужен решай сам. Дальше переведёшь время его в другой формат при помощи
Точность 100-наносекунд. |