Domanda

C'è un modo di tenere un filo in uno stato di attesa per le modifiche? Voglio dire aspettare TLL qualcosa accadesse (cambio Var, chiamata di metodo, ecc ..) forse ha bisogno usando listener di eventi, o gli oggetti sincronizzati / metodi ..

La solita aproach per statemachines come questo

statemachine esempio

che utilizza un do {..} while (true) ciclo che potrebbe funzionare per individuato filettata (e senza GUI) ma cant't essere utilizzato con le discussioni .. (Almeno che si desidera utilizzare un nucleo per ogni macchina a stati filettata)

Quindi, per evitare che il compito del processore consuma un modo semplice (e brutto) è un "checker periodica", voglio dire l'aggiunta di un sonno altra idea sta definendo un oggetto sincronizzato e utilizzando attesa invece di filo sonno

Esempio:

do{
    Switch(state)
    {         
        case STATE_A:
            //..A things                         
            break;

        case STATE_B:
            //..B things                         
            break;

        ...

        case STATE_Z:
            //..Z things                         
            break;
    }
    // Here!  =>   wait()?  Thread.sleep(TIME_CONST)? //Hold and yield
}while(powerOn);

Lo svantaggio è l'aggiunta di complessità utilizzando sincronizzato o che tutto ciò che accade all'interno di TIME_CONST sarebbe invisibile

Mi piacerebbe conoscere altre idee per fare questo, grazie!

È stato utile?

Soluzione

Sì, si sarebbe utilizzando wait / notify. Questo è quello che è per.

O forse la tua macchina a stati non ha bisogno di avere un proprio thread. Altri thread potrebbe chiamare un metodo update sulla macchina a stati quando succede qualcosa di interessante.

Altri suggerimenti

Se si specifica un in coda nella macchina dello Stato Umple poi il codice per questo sarà generato per voi. Specificando una macchina a stati umple come coda specificamente crea un thread che attende eventi (chiamate metodo chiamato). Altro codice nella classe può avvenire contemporaneamente in thread originale (s). La parola chiave 'in coda' deve essere collocato appena prima della definizione della macchina statale.

http://statemachines.umple.org per ulteriori informazioni sulla creazione di macchine a stati in Umple. Si può considerare Umple come solo un preprocessore per Java (e per le altre lingue) in questo contesto.

È inoltre possibile utilizzare la serratura e Condizione (Java 1.5+). E 'come wait/notify e non v'è un esempio nel javadoc

Provare a usare un tubo tra il filo origine eventi e il filo realizzazione FSM. Questo è sufficiente per un'attuazione 2 filettato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top