Cerco di dare un esempio concreto.
Crea un semaforo per un bivio.
Ho due semafori. Ho la possibilità di impostare una durata del semaforo di 2 minuti, 5 minuti, 10 m inuti ecc.
Quando un semaforo è rosso, l'altro semaforo è verde. Qual è il modo migliore e la migliore strategia per presentare in un altro semaforo questo stato di cambiamento?
Ovviamente il modo semplice è una variabile booleana. Qualcosa del genere:
while(semaphore1.IsRed)
{
//something
if(timeout == true)
{
semaphore1.Staus = Green;
//semaphore1.IsRed now is false
semaphore2.Status = Red;
}
//something
}
Il codice per semaphore2 è simile ...
while(semaphore2.IsRed)
{
//something
if(timeout == true)
{
semaphore2.Staus = Green;
//semaphore2.IsRed now is false
semaphore1.Status = Red;
}
//something
}
Ora chiedo, due variabili:
- non considerando il tempo trascorso
- considerando il tempo trascorso
Il primo caso,
facciamo finta di non considerare il tempo che trascorre. Il semaforo 1 è rosso ... Ora, come si presenta un semaforo2 che semaforo1 è ora verde (cambia stato)?
Ovviamente il metodo proposto è banale, semplice, logicamente scorretto e computazionalmente molto pesante. Può scorrere a vuoto molte volte. Dov'è il modo migliore? Utilizzare la delega? Utilizzare (creare un evento personalizzabile)? Oppure usa un thread separato?
Altra domanda è, al livello più basso, come lavorare eventi e thread? iterare tutto il tempo? Come calcolare il tempo trascorso? o come si rendono conto che lo stato (variabile) è cambiato?
E nel secondo caso?