Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.035 c
4-1088146499
_student
2004-06-25 10:54
2004.08.08
Как можно сделать индикатор, ну например как в винампе


14-1090566156
Mur_r
2004-07-23 11:02
2004.08.08
MS Help Workshop


14-1089978128
pavel_pavel
2004-07-16 15:42
2004.08.08
Часто ли пьют программисты?


1-1090680966
Dima_Delphi
2004-07-24 18:56
2004.08.08
Как очистить Stringgrid


3-1089404183
brigand
2004-07-10 00:16
2004.08.08
Как подлючиться





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский