Текущий архив: 2004.08.08;
Скачать: CL | DM;
ВнизНемного о TTimer е Найти похожие ветки
← →
ИМХО © (2004-07-24 12:39) [0]Вот объясните мне такую вещь, пожалуйста. Имеем TTimer с интервалом в 100 миллисекунд. Время выполнения процедуры обработки события OnTimer > 100 миллисекунд. Что произойдет?
← →
Anatoly Podgoretsky © (2004-07-24 12:43) [1]В зависимости от процедуры, может быть очень плохо, например StrackOverflow/Out of Memory
← →
oleg_SYS © (2004-07-24 12:47) [2]Ну типа через каждые 100 миллисекунд будет обрабатываться событе onTimer, которое длится 100 миллисекунд, как ты сказал :) Итого 200 миллискунд + НДС + 5% на пенсионный фонд Российской федерации :)
← →
Rem (2004-07-24 13:00) [3]Диспетчер событий Windows перед помещением событий определенного типа (мышь, таймер) в очередь, проверяет очередь на наличие сообщений того же происхождения, и, если таковые найдутся, не добавляет новое сообщение.
Поэтому, на самом деле, ничего не произойдет.
Например:
Таймер имеет интервал 10 мсек.
Метод обработки события выполняется 100 мсек.
По прошествии 1 сек таймер останавливается.
Итого, будем иметь 10 выполнений метода обработки события.
То-есть, в очереди не накопится 100 сообщений от таймера.
← →
Rem (2004-07-24 13:10) [4]Сам попробуй:
Кинь на форму:
Таймер с интервалом 100 мсек
Лйэбл с текстом "1"
Кнопку
OnButton1Click:
Timer1.Enabled := not Timer1.Enabled;
OnTimer:
Sleep(200);
Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
Подождать с минуту (можно до 100 :) - и нажать на кнопку.
О результатах проведенного эксперимента предоставить полный отчет в письменном виде :)
← →
Anatoly Podgoretsky © (2004-07-24 13:24) [5]Слишком у тебя просто пример
← →
Rem (2004-07-24 13:43) [6]Казнить нельзя помиловать.
Побольше конкретики, пожалуйста...
← →
Piter © (2004-07-25 01:04) [7]честно говоря, не знаю как устроен таймер.
Но что мешает разобраться, если интересно? Хотя бы можно поставить эксперимент - кинуть на форму таймер с интервалом в секунду.. Поставить там всего одну комманду, beep; например. И поставить на нем брекпоинт, запустить приложение, по брекпоинту приложение остановится, а ты сидишь и ждешь. Потом жмешь F9 и наблюдаешь мгновенное вхождение в обработчик еще раз. Отсюда однозначный вывод, что события становятся в очередь.
Можно и посложнее пример придумать:procedure TForm1.Timer1Timer(Sender: TObject);
begin
beep;
sleep(2000);
beep;
end;
Можно убедиться, что пока не произойдет полная обработчка одного события, второй раз оно не вызывается. Эксперименты заняли у меня около минуты.
А теперь ответим на поставленный вопрос:
ИМХО © (24.07.04 12:39)
Имеем TTimer с интервалом в 100 миллисекунд. Время выполнения процедуры обработки события OnTimer > 100 миллисекунд. Что произойдет?
после первого вызова обработчика последующие будут происходить сразу после окончания работы предыдущего обработчика, вот и все. Они как бы накапливаются.
Можно задаться еще вопросами аля "а что будет если остановить таймер - будут ли выполнены все события в очереди?". Но мне уже неинтересно проверять и так целую минуту потратил.
А вообще интересно - самому что ли сложно? Дельфи под рукой нету, да? :) (стандартная отмазка)
Страницы: 1 вся ветка
Текущий архив: 2004.08.08;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.043 c