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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 16:44   #1
nickel-j
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 28
По умолчанию Замер времени выполнения

Здравствуйте.
Итак, требуется замерить время исполнения процедуры. Для этого используется переменная time, при создании формы равная 0. Таймер изначально выключен, интервал=1 милисекунда. Сама процедура:
Код:
begin
 randomize;
 if Edit1.text='' then i:=1000 else i:=strtoint(Edit1.Text);
 if Edit2.text='' then j:=1 else j:=strtoint(Edit2.Text);
 if Edit3.text='' then k:=255 else k:=strtoint(Edit3.Text);
 timer1.Enabled:=true;//включаем таймер
 for c:=1 to i do
  begin
    wrd:='';
    leng:=j+random(k-j+1);
    for l:=1 to leng do
     wrd:=wrd+chr(random(26)+65);
    ADOTable1.InsertRecord([wrd])
  end;
 timer1.Enabled:=false; //выключаем таймер
 label5.Caption:=inttostr(time)
end;
Обработчик события по таймеру:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 inc(time)
end;
В процедуре происходит заполнение базы данных рандомными значениями строчного типа, по умолчанию 1000 записей, ЦП грузится на 100% секунд 5, однако таймер не срабатывает ни разу, в конце выдаётся значение 0. Пробовал выводить сообщение по таймеру - тоже не выводится, значит событие вообще не происходит. Что же неверно?
nickel-j вне форума Ответить с цитированием
Старый 28.05.2010, 16:53   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

изучите работу таймеров.
я думаю вам надо чтото типа
Код:
var Start:TDateTime;
begin 
 randomize;
 if Edit1.text='' then i:=1000 else i:=strtoint(Edit1.Text);
 if Edit2.text='' then j:=1 else j:=strtoint(Edit2.Text);
 if Edit3.text='' then k:=255 else k:=strtoint(Edit3.Text);
 Start:=Now;
 for c:=1 to i do
  begin
    wrd:='';
    leng:=j+random(k-j+1);
    for l:=1 to leng do
     wrd:=wrd+chr(random(26)+65);
    ADOTable1.InsertRecord([wrd])
  end;
 label5.Caption:=inttostr(SecondsBitween(Start,Now));
end;
чтото типа такого(помоему DateUtils надо в uses добавить)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.05.2010, 17:01   #3
nickel-j
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 28
По умолчанию

Спасибо, работает (SecondsBeetween), вот как раз и выдал 5 секунд, но это слишком грубая оценка - необходим более точный замер, так что буду смотреть, что можно сделать с таймером
nickel-j вне форума Ответить с цитированием
Старый 28.05.2010, 17:02   #4
nickel-j
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 28
По умолчанию

нашел в DateUtils millisecondsbetween - то, что доктор прописал))
nickel-j вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение времени выполнения кода Crystallon Общие вопросы Delphi 10 16.06.2010 21:59
С++, GetThreadTimes, Измерение времени выполнения потока OffyGhost Помощь студентам 1 13.03.2010 15:52
Распределения работы по рабочим, по времени выполнения. Rhamzes Microsoft Office Excel 3 01.07.2009 15:04
Измерение времени выполнения цикла Alexcomeback Общие вопросы C/C++ 10 25.04.2009 16:58
оптимизация для меньшения времени выполнения Ganmaker Паскаль, Turbo Pascal, PascalABC.NET 3 19.11.2008 17:33