Pergunta

Existe uma maneira de segurar um fio num Estado à espera de mudanças? Quero dizer espera tll algo happend (mudança var, chamada de método, etc ..) talvez ele precisa Usando ouvintes de eventos ou objetos sincronizados / métodos ..

O aproach usual para statemachines como este

StateMachine exemplo

que usa um while (true) loop que poderia trabalhar para escolhido rosca do {..} (e não GUI) aplicação mas cant't ser usado com tópicos .. (Pelo menos você quiser usar um núcleo para cada máquina de estado de rosca)

Então, para evitar que a tarefa processador consumir uma simples (e feio) forma é um "verificador periódica", quero dizer a adição de um sono outra idéia é definir um objeto sincronizado e usando espera em vez da suspensão fio

exemplo:

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);

A desvantagem é aumentar a complexidade usando sincronizados ou que qualquer coisa que acontecer dentro TIME_CONST seria invisível

Gostaria de conhecer outras idéias para fazer isso, obrigado!

Foi útil?

Solução

Sim, você estaria usando wait / notify. Isso é o que é para.

Ou talvez a sua máquina de estado não precisa ter seu próprio segmento. Outros tópicos poderia chamar um método update na máquina de estado quando algo interessante acontece.

Outras dicas

Se você especificar um fila de espera máquina de estado em Umple em seguida, o código para isso será gerado para você. Especificando uma máquina de estado umple como enfileirado especificamente cria um segmento que aguarda eventos (chamadas método chamado). Outro código na classe pode acontecer simultaneamente no segmento original (s). A palavra-chave 'fila de espera' deve ser colocado imediatamente antes da definição da máquina de estado.

Consulte http://statemachines.umple.org para obter mais informações sobre como criar máquinas de estado em Umple. Você pode considerar Umple como apenas um pré-processador para Java (e para outros idiomas) neste contexto.

Você também pode usar bloqueio e Condição (Java 1.5+). É como wait/notify e há um exemplo no javadoc

Tente usar um Cachimbo entre o segmento fonte do evento ea linha FSM encarnação. Isto é suficiente para uma aplicação de rosca 2.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top