![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Замерять время выполнения процедуры в мс.
ZV © (2010-09-14 10:59:00)Задача такая, процедура ищет нужные данные в массиве, хочу, замерять за какое время процедура обработает массив. Надо что то типа такого – вход в процедуру запуск таймера, поиск по массиву, получение результата ,остановка таймера, вывод времени выполнения процедуры.
Что для этого можно использовать? Таймер, выставить переполнение 1мс и по событию увеличивать переменную. Потом посмотреть её значения.
Или для такой задачи используются другие методы?
И ещё к этому один вопрос.
Программа по Ethernet передает пакет и получает ответ, сейчас для определения времени я использую TimeToStr(Time) но в этой функции максимальное разрешение в секундах, как сделать , что бы я видел минуты, секунды, миллисекунды.
Anatoly Podgoretsky (2010-09-14 15:42:00) [1]Какое это имеет отношение к времени замера?
Anatoly Podgoretsky (2010-09-14 15:41:00) [2]> ZV (14.09.2010 14:07:16) [16]
Через три года.
Плохиш (2010-09-14 14:28:00) [3]
> А чтобы выполнять во время sleep другие действия, то можно
> пустить его в отдельном потоке.
Там ещё и таймеры есть.
И. Павел (2010-09-14 14:23:00) [4]> Хотелось бы так- что задал время события и забыл.
Можно запланировать запуск программы в 24:00. Можно просто sleep на весь оставшийся интервал до 24 часов - у меня так одна программка работает - ждет 9 часов и запускается довольно точно. А чтобы выполнять во время sleep другие действия, то можно пустить его в отдельном потоке.
ZV (2010-09-14 14:07:00) [5]Еще забыл спросить. Мне нужно что бы событие произошло допустим в 24.00.
Мне что постоянно проверять Time пока не будет совпадения? Хотелось бы так- что задал время события и забыл.
ZV (2010-09-14 13:29:00) [6]
> Anatoly Podgoretsky
Спасибо , так и сделаю
Anatoly Podgoretsky (2010-09-14 13:26:00) [7]> ZV (14.09.2010 13:07:13) [13]
Тогда считай 100 ns или hardware тики, никакие тебе милли/микросекунды не
нужны.
ZV (2010-09-14 13:07:00) [8]
> И сколько этот определенный уровень?
Это максимальное количество задач. Максимальный уровень когда в базе есть ответы на вес задачи. Вопрос в что быстрей найти ответ в базе или пускай другой ПК подсчитает и ответит.
И. Павел (2010-09-14 13:01:00) [9]> Так как массив ответов нарастает до определенного уровня
> то естественно время поиска в нем будет нарастать.
Можно использовать какие-нибудь методы, ускоряющие поиск. Например двухмерный массив, элемент которого mas['а', 'в'] хранит адрес, по которому начинают идти строки 'ав*' и т.д., или выбрать что-нибудь еще.
Anatoly Podgoretsky (2010-09-14 12:56:00) [10]> ZV (14.09.2010 12:54:09) [9]
И сколько этот определенный уровень?
Anatoly Podgoretsky (2010-09-14 12:54:00) [11]Но автор точно не говорит, если нужна точность в миллисекунд, то пусть забудет с данной функцией.
ZV (2010-09-14 12:54:00) [12]
> Ну посмотрел, что 1,5 миллисекнды и что?
В общем дело обстоит так- Есть база готовых ответов (массив) процедура ищет в нем ответ к конкретной задаче. Ответы в в массив поступаю из другого ПК. Время расчета и ответа другого ПК остается неизменным, константа.
Так как массив ответов нарастает до определенного уровня то естественно время поиска в нем будет нарастать. Так вот для этого мне и нужен контроль времени поиска в массиве , и когда он превысит время ответа другого ПК, то смысл поиска в массиве отпадает потому что быстрей быстрей получить ответ от другого ПК чем найти его в массиве
brother (2010-09-14 12:28:00) [13]> Может вообще потребуются атомные часы.
ИМХО, тут GetTickCount подойдет...
Anatoly Podgoretsky (2010-09-14 12:27:00) [14]Ну посмотрел, что 1,5 миллисекнды и что?
Anatoly Podgoretsky (2010-09-14 12:26:00) [15]Посмотреть это не цель, а цель не обозначено. Может вообще потребуются атомные часы.
Anatoly Podgoretsky (2010-09-14 12:24:00) [16]> ZV (14.09.2010 10:59:00) [0]
Не проблема, только таймер не применим, в таймере нет информации о времени,
он не для этого.
Только легче мерить в 100 наносекундных интервалах, чем в миллисекундных -
использовать QueryPerfomanceCounter или еще более точный RDTSC доли
наносекунды.
12 (2010-09-14 12:13:00) [17]Удалено модератором
И. Павел (2010-09-14 11:51:00) [18]> [0] ZV © (14.09.10 10:59)
Наверное, точнее и правильнее выполнить функцию много раз, и получить среднее время выполнения функции, поделив общее время на число вызовов. При этом, если нужно, сперва можно случайно сгенерировать входные данные для всех вызовов, чтобы получить усреднение и по ним.
Jeer (2010-09-14 11:10:00) [19]
> хочу, замерять за какое время процедура обработает массив
1. GetTickCount - если достаточно разрешения 10-20 мс
2. QueryPerfomanceCounter
3. RDTSC
Сергей М. (2010-09-14 11:05:00) [20]
> как сделать , что бы я видел минуты, секунды, миллисекунды
Использовать FormatDateTime() вместо TimeToStr()