Форум: "Основная";
Текущий архив: 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