Я сейчас работаю с Qt; Я немного озадачен их выполнением слотов и сигналов (используя 5.4, но также мог использовать старый синтаксис). Я хорошо разбирался в этой части, но это ускользает от меня.Qt Slots and Signals confusion
Я использовал для создания слота и сигнального механизма в других (не Qt) проектах. У меня был бы диспетчер сообщений и рутина с регистрацией, чтобы он хотел отправить сигнал. Он отправит его менеджеру сообщений. Точно так же приемник зарегистрировал бы его, чтобы он хотел получить уведомление о сигнале. Для этого он запросил бы диспетчер сообщений. Затем, когда произошел сигнал, он направит его слушателю. Отправитель не знал, сколько (если есть) его слушателей, и слушатель не знал, кто может отправить этот сигнал (если есть).
Я понял, что Qt работает так, и я все еще мог подделать его, написав свой собственный диспетчер сообщений, но кажется, что слоты и сигналы должны позаботиться об этом. Однако при чтении примеров слотов и сигналов кажется, что при подключении вам нужно знать, кто будет отправителем сигнала, и подключить его к вашему слоту. Однако, что, если сигнал поступает из нескольких мест? Нужно ли подключать его к каждому модулю? Казалось бы, это победит цель, но каждый пример, который я нахожу, показывает, что он знает, откуда идет сигнал.
Любые разъяснения оцениваются.
Что вы имеете в виду, говоря, _The сигнал поступает из нескольких places_? Не могли бы вы добавить какой-нибудь (псевдо) код, чтобы проиллюстрировать, чего вы пытаетесь достичь? – hank
Я имел в виду, что несколько источников могли отправлять один и тот же сигнал. Например, может быть сигнал, который говорит «revertAll» (пример). Несколько функций могут работать в ситуации, когда они должны выдать revertAll. Они вносят изменения, но другие могут захотеть, поэтому он отправляет сообщение «revertAll», не заботясь о том, кто его получает. Аналогично, модуль, возможно, потребуется знать, когда мы возвращаемся, чтобы он мог себя настроить. RevertAll может произойти в самых разных обстоятельствах, поэтому неясно, кто может его отправить (и данный модуль не должен заранее знать о других модулях). Как обмен сообщениями Windows. – LPTab
На самом деле другим примером является то, как в Android/Java вы можете настроить слушателей. Любой может слушать событие. Любой другой в этом интерфейсе может выдать событие. Вам не обязательно знать, куда он идет, или куда он приходит, чтобы использовать его. – LPTab