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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 01:39   #1
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию Как можнО засечь промежуток времени, которое проработала функция

Как можна засечь промежуток времени которое проработала функция,
может я не так выразился, уж извините, уже сплю
ради интереса хочется узнать сколько по времени отрабатывает процедура,
попробывал таймером засечь время, никакого ефекта с этого не получилось...
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 18.11.2009, 01:44   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот эту тему почитайте, начиная с седьмого поста - про "тики" процессора...
http://www.programmersforum.ru/showthread.php?t=12132
mihali4 вне форума Ответить с цитированием
Старый 18.11.2009, 01:48   #3
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Еще раз спасибо)
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 18.11.2009, 10:44   #4
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вот Вам простенькая программка, измеряющая время выполнения цикла While с применением функции FormatDateTime.В Edit вводите число, задающее время цикла в сек. и жмем "Пуск". Дальше все будет понятно. И еще, в коде поиграйтесь с параметром процедуры Sleep(). Ну и эта строчка программы интересна :
Код:
set_data:= trunc(((StrToFloat(Edit1.Text))*64) / 2);
Думаю комментарии излишни для нее, все зависит от "железа".
Вложения
Тип файла: rar TimerCicle.rar (3.3 Кб, 13 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 18.11.2009, 13:19   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

То DarkEvil
Не вздумайте использовать Sleep - она приостанавливает выполнение задачи и результат ваших измерений будет непредсказуемым...
mihali4 вне форума Ответить с цитированием
Старый 18.11.2009, 13:49   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
Не вздумайте использовать Sleep
Думаю следует уточнить - нельзя (нежелательно) использовать Sleep в качестве измеряющего элемента. В даном случае Sleep используется как измеряемый элемент - вставлен в тело цикла для получения видимой задержки времени исполнения цикла. В противном случае (без Sleep) цикл выполняется процессором практически мгновенно.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 18.11.2009, 13:52   #7
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Все верно Sleep() приостанавливает задачу, оно мне не подходит.
мне нужно что-то вроде этого:
Код:
a = GetCurTimeStamp();
Моя процедура
b = GetCurTimeStamp();
all = b - a;
Цитата:
В даном случае Sleep используется как измеряемый элемент - вставлен в тело цикла для получения видимой задержки времени исполнения цикла
Вод задержка как раз мне и не нужна, у меня есть две функции одна написана на api+asm вторая на дельфи
вот мне и интересно зря ли я переводил код на Апи
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!

Последний раз редактировалось DarkEvil; 18.11.2009 в 13:55.
DarkEvil вне форума Ответить с цитированием
Старый 18.11.2009, 14:04   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Прочитайте внимательно предыдущий пост (#6)
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Canvas.TextOut(24,100,'Пуск (начало цикла) -   ' + FormatDateTime('n',Now) + '  ' + FormatDateTime('s',Now)+ '  ' + FormatDateTime('zzz',Now));
  Label1.Caption:= FormatDateTime('s',Now)+FormatDateTime('zzz',Now);
  data1:= StrToInt(Label1.Caption);
 
// вызывайте здесь свою функцию, которую хотите измерить

  Label2.Caption:= 'Стоп (конец цикла) -  ' + FormatDateTime('n',Now) + '  ' + FormatDateTime('s',Now)+ '  ' + FormatDateTime('zzz',Now);
 // count:= 0;
  Label3.Caption:= FormatDateTime('s',Now)+FormatDateTime('zzz',Now);
  data2:= StrToInt(Label3.Caption);
  Label4.Caption:= ' Время выполнения цикла -  ' + IntToStr(data2 - data1) + '    мсек';
end;
Cлово "цикл" в коде замените на "функция".
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 18.11.2009, 15:57   #9
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
Стрелка

Попробуйте так.

Код:
procedure TForm1.RunTest;
begin
  Memo1.Lines.Add(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', Now) + ' Start');
.
.
.
  Memo1.Lines.Add(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', Now) + ' done.');
end;
VladimirVB вне форума Ответить с цитированием
Старый 18.11.2009, 16:07   #10
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Самое легкое и практичное, на мой взгляд: GetTickCount();
Берём в начала, в конце, а время выполнения - разность (мс)
TwiX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение действия через промежуток времени chingiz Общие вопросы Delphi 37 03.10.2012 11:33
Промежуток времени в BottomAxis KuevProger Общие вопросы Delphi 4 05.06.2009 14:25
Как можно обратиться к устройству, которое подключено через USB порт Mikhail Bakurov Общие вопросы Delphi 8 17.11.2008 20:42
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25