Cosa usare in caso di attesa di qualcosa che è completo: delegati, eventi e / o thread

0

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?

    
posta rul3z 07.04.2016 - 18:09
fonte

0 risposte

Leggi altre domande sui tag