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

Вниз

Немного о 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
1-1090501632
юзверь
2004-07-22 17:07
2004.08.08
помогите, спасите от мучений:) с текстом


4-1088495287
QSpeller
2004-06-29 11:48
2004.08.08
Как сделать всплывающую подсказку в системном трэе в XP?


1-1090513591
saimon
2004-07-22 20:26
2004.08.08
Hint в ListBox e


1-1091002620
Loki3D
2004-07-28 12:17
2004.08.08
как добавить данные из таблици в TComboBOx TDBComboBox


1-1090649821
Fagot
2004-07-24 10:17
2004.08.08
SAM





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