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

Вниз

Если два различных Sender a вызывают одно событие   Найти похожие ветки 

 
События   (2002-11-27 13:33) [0]

Если одновременно два различных Sender"a вызывают одно событие, будет ли вызвана вторая его копия, или то, которое было вызвано первым прервется или как?


 
MBo   (2002-11-27 13:37) [1]

Одновременно не бывает.
Ни копии, ни прерывания - по завершению одного вызовется другое


 
Digitman   (2002-11-27 13:38) [2]

никаких прерываний - процедура-обработчик в любом случае выполняется до конца, так , как это предусмотрено ее логикой


 
События   (2002-11-27 13:40) [3]

Например событие вызывается по сигналу с com-port"a.
Таких сигналов может прийти очень много с большой скоростью.
Что будет с теми, кот. не успевают оюрабатываться?


 
down   (2002-11-27 13:44) [4]

Смотпря как их обрабатывать, можно складывать в очередь, а можно пропускать.


 
Digitman   (2002-11-27 13:45) [5]


> по сигналу с com-port"a.


Это как ? Компонент что ли какой-то вызывает событие ? Пример кода приводи.


 
События   (2002-11-27 13:46) [6]

А как в очередь складывать, ты имеешь ввиду структуру очередь (FIFO)?


 
Ihor Osov'yak   (2002-11-27 13:47) [7]

Что такое копия в вашем понимании?

Обработчик - обычный метод, который может быть вызван повторно
через неявную рекурсию. Также очень просто нарватся при не совсем осознаном использовании Application.ProcessMessages в коде обработчика.
Повторный вызов обработчика (в смысле, что в стеке вызовов выше уже есть вызов этого обработчика) никак не влияет на "прерывание" стоящего выше.

Зы. А я еще молчу про многопоточность ....
Зы2. То, что в неких кругах и литературе обработчики делфийских компонент зовутся событиями вносит очень большую путаницу в неокрепшие умы юных кодеров. Но это имхо ...








 
События   (2002-11-27 13:49) [8]

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


 
Ihor Osov'yak   (2002-11-27 13:50) [9]

2 MBo © (27.11.02 13:37)

У меня подозрение, что вопрошающий не очень то понимает термины
"событие","прерывание" и т.п.


 
MBo   (2002-11-27 13:58) [10]

>Ihor Osov"yak
Исходя из слова Sender" - я решил, что имеются в виду обработчики


 
Ihor Osov'yak   (2002-11-27 14:14) [11]

2 MBo © (27.11.02 13:58) - дык я тоже так решил.
Но тогда Ваш ответ не очень корректен.
Пример (дебильный,даже можно привести аргумент, что пример как не надо в большинстве случаев делать, но все же):

По клику на бутончик запускаем некий цикл, который чего-то считает. Долго. Естественно, чтобы форма не тормозила, чел юзает Application.ProcessMessages. В то время, когда еще работает цыкл от первого клика, юзер щелкает на бутон снова (ибо юный талантливый программер его не заблокировал, ну или может и не недо блокировать по логике программы). Обработчик снова будет вызван (хотя в стеке еще висит старий) - слава умелому юзанию Application.ProcessMessages.

Итого - начинает свою работу "второй екземпляр цикла" - даже не соображу как правильно эту ситуацию терминами обозначить, вопрошающий наверно такую ситуацию имел ввиду под термином "копия". Когда он работу закончит - по стеку откатываемся к "первому екземпляру" ...

То есть Ваше утверждение "Ни копии, ни прерывания - по завершению одного вызовется другое" - как минимум может вопрошающего того немножко обескуражить (неговоря уже о корректности этого высказывания)...



 
MBo   (2002-11-27 14:27) [12]

>Ihor Osov"yak
Да, в случае с Application.ProcessMessages (ИМХО, особь статья) это совершенно справедливо. Вот дем. код - надо быстро кликнуть пару раз на кнопку.

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
inc(j);//глобальная интегер
memo1.lines.add("start number "+inttostr(j));
for i:=1 to 1000 do begin
memo1.lines.add(inttostr(i));
application.processmessages;
end;
memo1.lines.add("end number "+inttostr(j));
end;


 
Ihor Osov'yak   (2002-11-27 14:32) [13]

2 MBo © (27.11.02 14:27)
(ИМХО, особь статья)
Ох, блин, особь стать... Сори за эмоции, не удержался...

С уважением, Ihor



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

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

Наверх





Память: 0.48 MB
Время: 0.009 c
4-14881
Igor_thief
2002-10-20 18:57
2002.12.05
ProgressBar и StatusBar


4-14888
valeryM
2002-10-23 15:53
2002.12.05
Минимизация модальной формы


6-14706
and1
2002-10-09 21:00
2002.12.05
hab, switch


1-14590
DDF
2002-11-27 08:33
2002.12.05
Обработка ошибок


3-14362
GEG (Alex)
2002-11-19 09:30
2002.12.05
Ошибка в DBGrid or IB ?





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