Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2009, 00:48   #1
Lord Lex
 
Регистрация: 01.03.2009
Сообщений: 3
Вопрос необходимо засечь время выполнения части алгоритма

В задаче необходимо собрать стат-данные по различным типам сортировки...
подскажите как засечь время выполнения ограничивающееся несколькими миллисекундами. (Delphi)
Lord Lex вне форума Ответить с цитированием
Старый 01.03.2009, 01:16   #2
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

что вроде этого:
Код:
var t1,t2,t:double;
begin
  t1:=now;
  { код сортировки
  }
  t2:=now;
  t:=t2-t1;
  writeln(t);
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 01.03.2009, 01:31   #3
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Вот для Делфи:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var i, iTick: Integer;
Begin
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
iTick:=GetTickCount;
For i:=0 To 100000 {или чего пострашнее} Do
    Begin
    //тут измеряемая функция
    End;
ShowMessage(IntToStr(GetTickCount-iTick));
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);
End;
Это будет время выполнения функции в миллисекундах...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 01.03.2009, 01:49   #4
Lord Lex
 
Регистрация: 01.03.2009
Сообщений: 3
По умолчанию

спасибо большое все это работает но... если не ставить "левых" операций в результате сортировки 500-элементного массива получаем результат 0 миллисекунд... есть ли возможность засечь еще более мелкий интервал времени???
Lord Lex вне форума Ответить с цитированием
Старый 01.03.2009, 01:59   #5
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Компьютер считает очень быстро... Поэтому измеряется цикл с функцией - как бы Ф*k (функция на коэффициент)...

Попробуй поставить в цикле
Код:
For i:=0 To 100000 {или чего пострашнее} Do
число "пострашнее"...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 01.03.2009, 02:40   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Попробуйте вот эти WinApi-функции использовать вместо GetTickCount

QueryPerformanceCounter
QueryPerformanceFrequency

QueryPerformanceCounter- возвращает значение счётчика высокого разрешения.

QueryPerformanceFrequency - возвращает частоту счётчика высокого разрешения.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 01.03.2009, 12:52   #7
Lord Lex
 
Регистрация: 01.03.2009
Сообщений: 3
По умолчанию

спасиб... разобрался
Lord Lex вне форума Ответить с цитированием
Старый 01.03.2009, 13:35   #8
fabregas
Пользователь
 
Аватар для fabregas
 
Регистрация: 01.03.2009
Сообщений: 23
По умолчанию

DomiNick, кто тебе дал право писать следующее:
Код:
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Конечно недалекие разработчики в мелкософте дали такую возможность, но это не значит что этим можно пользоваться...
fabregas вне форума Ответить с цитированием
Старый 01.03.2009, 14:37   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от fabregas Посмотреть сообщение
DomiNick, кто тебе дал право писать следующее:
Код:
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Конечно недалекие разработчики в мелкософте дали такую возможность, но это не значит что этим можно пользоваться...
Да, это нехорошо, но если это только временно, чтобы как можно точнее узнать время выполнения, то, по-моему, вполне допустимо (если потом вернуть обратно). Другое дело, что в данном случае, когда это выполняется меньше 1 мс, лучше просто перед этим сделать Sleep(1), чтобы контекст точно не переключился.
Вообще, если нужна статистика по времени сортировки, просто надо брать побольше массивы, чтобы подольше сортировались.
Somebody вне форума Ответить с цитированием
Старый 01.03.2009, 14:57   #10
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
кто тебе дал право писать следующее
Цитата:
разработчики в мелкософте дали такую возможность
Ну они и дали "право"... А в чём собственно дело-то? Это разве запрещено?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить время выполнения процедуры? Bezdar Microsoft Office Excel 4 20.01.2009 13:57
Цикл, время выполнения шага KiDoki Общие вопросы Delphi 9 19.12.2008 22:37
Засечь время, затраченное на выполнение программы. Делфи. north Помощь студентам 5 12.12.2007 22:32
Как замерить время выполнения программы Gracel Общие вопросы Delphi 5 12.06.2007 22:16
Сложность Алгоритма PChEL@ Помощь студентам 3 26.05.2007 07:56