Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Миллисекунды   Найти похожие ветки 

 
mishapost   (2004-10-26 23:44) [0]

Народ надо подсчитать сколько миллисекунд будет обрабатыватся алгоритм сортировки. Как подсчитать эти миллисекунды. Желательно с примером. Спасибо


 
Yanis ©   (2004-10-26 23:48) [1]

Сейчас скажу.


var
pStart,pEnd:Integer;
begin
pStart := GetTickCount();
// код
pEnd := GetTickCount();


 
Yanis ©   (2004-10-26 23:49) [2]

забыл :)
А затем

ShowMessage(IntToStr(pEnd-pStart));


 
mishapost   (2004-10-27 00:30) [3]

По-этому алгоритму на глаз видно что считает он не верно


 
Palladin ©   (2004-10-27 00:40) [4]

И что же не верного видно твоему наглазу?


 
_def[eND]er   (2004-10-27 01:40) [5]

А вот и неверно :)

Вот как надо:

procedure Something;
var
 I: Cardinal;
begin
 I := GetTickCount;
 ... //  Код, скорость которого надо узнать
 ShowMessage("Прошло " + IntToStr(GetTickCount - I) + " секунд");
end;


 
_def[eND]er   (2004-10-27 01:42) [6]

Хотя и там было правильно, видимо спать пора :)


 
PKT   (2004-10-27 02:00) [7]

to: def[eND]er   (27.10.04 01:40) [5]
Тоже неверно :о)
ShowMessage("Прошло " + IntToStr(GetTickCount - I) + " секунд");


 
_def[eND]er   (2004-10-27 03:38) [8]

Точно :)

Бывает :))


 
Юрий Зотов ©   (2004-10-27 08:13) [9]

Не годится такой метод для мультизадачных систем. Разве что для грубых измерений, но никак не для миллисекундных.

Что получится, если между двумя вызовами GetTickCount система передаст управление другому потоку? Ошибка получится, и, возможно, немалая (а если этот другой поток еще и имеет повышенный приоритет, то ошибка вообще может быть сколь угодно большой). И самое плохое то, что оценить величину этой ошибки невозможно (да и нестабильна она, к тому же).

Выход - использовать GetThreadTimes.


 
Anatoly Podgoretsky ©   (2004-10-27 08:46) [10]

А зачем считать миллисекунд - это же мгновенно, другое дело секунды, но их и без подсчета видно.


 
TUser ©   (2004-10-27 10:37) [11]


> А зачем считать миллисекунд - это же мгновенно, другое дело
> секунды, но их и без подсчета видно.

Т.е. время работы алгоритмов вообще не надо измерять?


 
Anatoly Podgoretsky ©   (2004-10-27 11:32) [12]

TUser ©   (27.10.04 10:37) [11]
Коротких нет смысла, длинные стоит, но это и на глаз щаметно, точное значения нужны только если проверять разные алгоритмы оптимизации, чтобы было с чем сравнивать.


 
Denis ©   (2004-10-27 11:39) [13]

интересно, насколько актуален этот код для Delphi?
позже проверю.
Взято из лекций по решению олимпиадных задач. Автора не знаю.

const timetest=10;{время тестирования программы}
var timer:longint absolute $40:$6c;
   timeold:longint;
begin
 timeold:=timer;
 while true do
 if timer-timeold>18.2*(timetest-0.5) then
 begin
   …{запись текущего результата в файл
     или сообщение об отсутствии решения}
   halt
 end
else {собственно работа программы}
Данная программа использует тот факт, что к значению четырехбайтовой целой переменной, расположенной по абсолютному адресу $40:$6С, раз в 1/18.2 секунды аппаратно прибавляется единица.


 
Jeer ©   (2004-10-27 12:58) [14]

mishapost   (26.10.04 23:44)  

Для удовлетворительной точности с использованием GetTickCount
необходимо выполнить осреднение времени выполнения, вызвав
функцию сортировки много сотен или тысяч раз между измерениями.
Т.е.

Yanis ©   (26.10.04 23:48) [1]

var
pStart,pEnd:Integer;
begin
pStart := GetTickCount();
for i:=1 to N do
// код
pEnd := GetTickCount();

tm := (pEnd - pStart)/N;

Число N подобрать исходя из общего времени tm в несколько секунд.


 
GuAV ©   (2004-10-27 13:27) [15]

Этот код под дос.
в дельфи даже не откомпилится.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1098616475
Паша555
2004-10-24 15:14
2004.11.07
Символы транскрипции


8-1091795998
Ale}{(is)
2004-08-06 16:39
2004.11.07
Нужно получить по известному хэндлу иконки её глубину цвета


14-1097830210
AlexG
2004-10-15 12:50
2004.11.07
Мультизагрузка, WinXP и Win2000...


1-1098773453
wild_arg
2004-10-26 10:50
2004.11.07
оператор With


1-1098455451
DelphiLexx
2004-10-22 18:30
2004.11.07
Переименовать производителя проги





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский