Александр Ильин писал(а):
Зачем два прохода по одному и тому же списку? Из описания не понятно, почему Omnicast не вызывает сразу хэндлер броадкаста.
Меня смутили вот эти комментарии:
Цитата:
PROCEDURE (s: StdSequencer) Handle (VAR msg: ANYREC);
(* send message to all windows attached to s *)
и
Цитата:
Window* = POINTER TO ABSTRACT RECORD
...
link-: Window; (* ring of windows with same sequencer *)
Судя по ним, между окном и секвенсером отношение многие-к-одному. Стало быть, чтоб не хранить списки окон у секвенсера и не блокировать сборку мусора, нужны дополнительные проходы.
Но чем больше я смотрю на PROCEDURE (h: Hook) Omnicast и PROCEDURE (s: StdSequencer) Handle, тем меньше мне понятно реализованное в них. В каркасе вызов w.BroadcastViewMsg делается только из секвенсера и только вот таким "извращённым" способом. Не понимаю. Может быть, это уже оффтоп.