![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() хоть мне кажется это уже давно разжеванный вопрос но у меня ничего не получается
![]() делал и так Код:
procedure TForm1.Button1Click(Sender: TObject); const ms = 1/24/60/60/1000; var i:integer; t1, t2: tdatetime; as1:array [1..1000] of integer; begin randomize; t1 := now; for i:=1 to 1000 do as1[i]:=random(40); t2 := now - t1; ShowMessage('Твой код выполнялся:'+inttostr(trunc(t2/ms))+'милисеунд'); end; Код:
var i:integer; t:integer; as1:array [1..1000] of integer; begin randomize; t:=GetTickCount; for i:=1 to 1000 do as1[i]:=random(40); t:=t-GetTickCount ShowMessage('Твой код выполнялся:'+inttostr(t)+'милисеунд'); end; вроди бы все верно но всегода показывает Твой код выполнялся:0 милисеунд Как быть? |
#2
|
||||
|
||||
![]() Кидай на форму Timer (обязательно поставь Interval на позицию 1). Объяви переменную i в разделе var в самом начале. Поставь у Timer свойство Enabled в False. Пиши в обработчике OnTimer:
Код:
begin Inc(i,1); end; Код:
Timer1.Enabled:=True Код:
Timer1.Enabled:=False; ShowMessage('Код выполнялся (мс): '+IntToStr(i)); |
#3
|
|||
|
|||
![]() Ни один из методов не будет показывать правильно.
Главная причина в том, что точность системного таймера при использовании ОС Windows составляет около 25 мсек. И от навороченности компьютера не зависит. Поэтому, если ваш код выполняется менее 15-20 мсек., то вы в любом случае будете получать результат равный 0. Последний раз редактировалось san-46, 16.05.2008 в 09:03. |
#4
|
||||
|
||||
![]() Код:
Var T1,T2,Fr:Int64; Code_time:Double; function RDTSC: Int64; register; //Получение количество тактов процессора, со времени его включения asm rdtsc end; begin //Узнаем частоту T1:=RDTSC; sleep(1000); T2:=RDTSC; Fr:=T2-T1; T1:=RDTSC; //Тут выполняем код, время исполнения которого нужно узнать // Sleep(10); T2:=RDTSC; Code_Time:=(T2-T1)/Fr*1000; ShowMessage('код выполнялся '+FloatToStr(Code_Time)+' мс'); end; Хорошо написанная программа не требует документации ICQ 9-184-668. |
#5
|
|||
|
|||
![]() Thrasher Спаибо большое за столь исчерпывающий ответ.
Всё понятно, кроме одного, зачем нужна задержка на 1 сотую сек. после выполнения кода? Замечено, что получаются каждый раз разные Fr. У меня частота процессора по бумажке 2.31 ГГц, то есть, если я не ошибаюсь, 2 310 000 000 герц, а с использованием метода Thrasher, в Code_Time у меня записывалось максимум аж 14 705 593 806 герц, и это то, что я переписал на бумажку, а бывало и за 17 ГГц. Непонятки. Последний раз редактировалось Fredwriter, 14.11.2010 в 15:15. |
#6
|
||||
|
||||
![]() Твой код,
Код:
for i:=1 to 1000 do as1[i]:=random(40); Код:
for j:=0 to 1000000 do for i:=1 to 1000 do as1[i]:=random(40); jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 14.11.2010 в 15:20. |
#7
|
|||
|
|||
![]() Bargest, Вы кому ответили kraken'у, он же не заходил на форум с 2008 года
![]() |