11.07.2015 Views

Programando em NCL 3.0.pdf - Telemidia - PUC-Rio

Programando em NCL 3.0.pdf - Telemidia - PUC-Rio

Programando em NCL 3.0.pdf - Telemidia - PUC-Rio

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

O probl<strong>em</strong>a com esse código é que a chamada à função sleep bloqueia otratador, não permitindo que outros eventos sejam processados, inviabilizandoessa proposta.Uma possível solução seria criar uma função de update a ser chamada acada 30 milissegundos por um t<strong>em</strong>porizador (Listag<strong>em</strong> 18.19).function update ()logoLua.x = logoLua.x + 5redraw()if logoLua.x < 100 thenevent.timer(update, 30)endendfunction tratador (evt)if evt.action == 'start' thenupdate()endendevent.register(tratador, 'ncl', 'presentation')Listag<strong>em</strong> 18.19 Ex<strong>em</strong>plo de animação <strong>em</strong> <strong>NCL</strong>ua que utiliza um t<strong>em</strong>porizador.Pela listag<strong>em</strong> anterior, ao ser chamado, o tratador ativa a função update,que atualiza a posição do logotipo de Lua, chama a função de redesenho e,caso o logotipo ainda não tenha alcançado a posição 100, se programa paraser chamado novamente após 30 milissegundos de espera.Essa solução não é tão legível quanto um loop localizado, mas mantém o<strong>NCL</strong>ua reativo a possíveis eventos que possam chegar durante os 30milissegundos.18.4.2 Corrotinas de LuaO mecanismo de corrotinas de Lua simplifica muito a programação deaplicações <strong>em</strong> que muitos objetos interag<strong>em</strong> e dev<strong>em</strong> estar permanent<strong>em</strong>entesincronizados.Apesar de ser<strong>em</strong> comumente comparadas a threads, as corrotinas são,na verdade, muito mais próximas do conceito comum de função (ou rotina).Da mesma forma que as funções, chamadas a corrotinas são síncronas, isto é,o código que chama uma corrotina s<strong>em</strong>pre aguarda o seu retorno. No entanto,uma corrotina pode explicitamente suspender sua própria execução,preservando o seu estado corrente (isto é, variáveis locais, contador deinstruções), antes do seu término completo. Ao se suspender, uma corrotinaretorna imediatamente o controle a qu<strong>em</strong> a chamou. Nesse caso, a corrotina393

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!