Programação concorrente

Tempo máximo para a recepção de uma mensagem

A primitiva receive pode ser refinada com um timeout opcional. A sintaxe completa passa então a ser a seguinte:

receive
    Mensagem1 [when Guard1] ->
        Acção1;
    Mensagem2 [when Guard2] ->
        Acção2;
    ...
    after Timeout ->
        AcçãoT
end.

Timeout é um inteiro (ou uma expressão que devolva um inteiro), interpretado como um tempo dado em milisegundos. A precisão deste timeout depende, obviamente, do sistema operativo. 

Se nenhuma mensagem for seleccionada pelo receive durante o período de tempo indicado, a acção indicada em AcçãoT é avaliada.

Dois valores para o timeout têm um significado especial:

Exercícios

1) Implemente um processo que, se não receber mensagens de cinco em cinco segundos, imprime no ecrã "À espera de mensagens...". Este processo deve tratar as seguintes mensagens:

Sugestão de resolução: separe os diferentes estados do processo em funções distinctas.


2) Implemente um processo que simule um cronómetro digital da forma "Minutos:Segundos". Deverão ser desenvolvidas as funções de interacção com o processo:

Sugestão de resolução: separe os diferentes estados do processo em funções distinctas.