В управляемой событиями архитектуре каждый компонент действует только тогда, когда событие отправляется через систему.
Представьте себе гипотетическую машину с педалью тормоза и стоп-сигналом.
- Тормозные легкие повороты на , когда он получает brake_on событие, и прочь , когда он получает brake_off событие.
- Педаль тормоза отправляет событие brake_on, когда она нажата, и событие brake_off, когда она отпущена.
Это все хорошо, пока у вас не возникнет ситуация, когда автомобиль включен с уже нажатой педалью тормоза . Поскольку стоп-сигнал никогда не получал событие brake_on , он останется выключенным - явно нежелательная ситуация. Включение стоп-сигнала по умолчанию только полностью изменяет ситуацию.
Что можно сделать, чтобы решить эту «проблему начального состояния»?
РЕДАКТИРОВАТЬ: Спасибо за все ответы. Мой вопрос был не о реальной машине. В автомобилях они решили эту проблему, постоянно отправляя информацию о состоянии, поэтому в этом домене нет проблем с запуском. В моей области программного обеспечения это решение будет использовать много ненужных циклов ЦП.
РЕДАКТИРОВАТЬ 2: В дополнение к ответу @ gbjbaanb , я иду для системы, в которой:
- гипотетическая педаль тормоза после инициализации отправляет событие со своим состоянием, и
- гипотетический стоп-сигнал после инициализации посылает событие, запрашивающее событие состояния, из педали тормоза.
В этом решении нет никаких зависимостей между компонентами, нет условий гонки, нет очередей сообщений, которые могут устареть, и нет «главных» компонентов.
initialize
), которое содержит необходимые данные датчика.