In un'architettura guidata dagli eventi, ciascun componente agisce solo quando un evento viene inviato attraverso il sistema.
Immagina un'auto ipotetica con un pedale del freno e una luce dei freni.
- La luce del freno si accende quando riceve un evento Brake_on e si spegne quando riceve un evento Brake_off .
- Il pedale del freno invia un evento Brake_on quando viene premuto e un evento Brake_off quando viene rilasciato.
Va tutto bene, fino a quando non si verifica la situazione in cui l'auto viene accesa con il pedale del freno già premuto . Poiché la luce del freno non ha mai ricevuto un evento Brake_on , rimarrà spenta, una situazione chiaramente indesiderabile. L'accensione della luce di stop di default inverte solo la situazione.
Cosa si potrebbe fare per risolvere questo "problema di stato iniziale"?
EDIT: grazie per tutte le risposte. La mia domanda non riguardava un'auto vera. Nelle auto hanno risolto questo problema inviando continuamente lo stato - quindi non c'è nessun problema di avvio in quel dominio. Nel mio dominio del software, quella soluzione userebbe molti cicli CPU non necessari.
EDIT 2: Oltre alla risposta di @ gbjbaanb , vado per un sistema in cui:
- l'ipotetico pedale del freno, dopo l'inizializzazione, invia un evento con il suo stato e
- l'ipotetica luce di stop, dopo l'inizializzazione, invia un evento che richiede un evento di stato dal pedale del freno.
Con questa soluzione, non ci sono dipendenze tra i componenti, nessuna condizione di competizione, nessuna coda di messaggi per diventare obsoleta e nessun componente "master".
initialize
) che contenga i dati del sensore necessari.