Cimeira 4D de 2016: Laurent Esnault apresenta os trabalhadores e a IU em modo preventivo

Tradução automática de Deepl

O nosso próprio VP de Engenharia, Laurent Esnault, explica a troca de informação entre múltiplos processos E entre processos e formulários durante a sua Sessão de Intervalo: Preemptive Multi-threading na Cimeira 4D de 2016. Graças à multi-tarefa preventiva, é possível ter mais processos paralelos, e assim adicionar cada vez mais utilizadores, quer para aplicações desktop quer para aplicações web.

Se perdeu a sessão de Laurent na Cimeira 4D de 2016, veja este vídeo de 15 minutos e desfrute de alguma formação pessoal pelo mestre da multi-treading preventiva!

Pré-requisitos

Para tirar partido da multi-tarefa preventiva, terá de utilizar:

Mas não tenha medo! Temos algumas soluções poderosas e fáceis que vamos apresentar em detalhe com exemplos ilustrativos.

Como partilhar informações entre processos

Se não tem variáveis inter-processos em modo preventivo, como partilha a informação entre processos? É por isso que estamos a introduzir um novo conceito: “trabalhadores”. Mas o que é exactamente um “trabalhador”?

Ainda bem que perguntou! É uma caixa de mensagens associada a um processo especificamente dedicado a executar as suas mensagens. Usando o comando CALL WORKER pode enviar uma mensagem de um processo para outro (para lhe enviar informação, ou pedir-lhe que faça alguma coisa). A sintaxe deste comando é bastante semelhante à do comando New process por exemplo, pode passar qualquer parâmetro e/ou método de projecto.

Vamos usar uma pequena animação para compreender melhor o seu funcionamento:

Neste exemplo, queremos passar informação do processo de candidatura para o processo myWorker. O processo de candidatura está em curso e o processo myWorker está em pausa.

  • No processo de candidatura, a CALL WORKER é chamado para passar alguns parâmetros a myWorker, e queremos que myWorker execute o método de projecto myMethod.
  • Cria uma mensagem que é afixada de forma assíncrona a uma caixa de mensagens dedicada ao processo myWorker. A bandeira é hasteada, pelo que o trabalhador desperta e apanha automaticamente a mensagem, recupera o conteúdo (os parâmetros) e executa o myMethod.
  • Quando o processo myWorker tiver terminado de executar o myMethod, ele não morre. É apenas pausado, à espera de outra mensagem para executar. Esta é a principal diferença em relação ao método New process que cria um processo, executa um método com alguns parâmetros, depois morre.

Então quando é que um trabalhador morre? Basicamente, morrerá quando fechar a aplicação ou se chamar o comando KILL WORKER comando. Não mata abruptamente o processo, apenas envia uma mensagem ao trabalhador pedindo-lhe para cometer suicídio.

Demonstração: Trabalhadores

Veja o exemplo da base de dados utilizada para a demonstração com as correspondentes explicações no posto de Vanessa sobre os trabalhadores.

Como aceder à interface de utilizador a partir de processos preventivos

Há pouco, dissemos que não se pode aceder à interface do utilizador a partir de um processo preventivo. Obviamente, precisávamos de fornecer uma solução para isso. Daí, a introdução do CALL FORM comando. Este comando é semelhante ao comando CALL WORKER comando. Desta vez, porém, não é uma caixa de mensagem associada a um processo, é uma caixa de mensagem associada a uma janela.

CALL FORM permite enviar uma mensagem a uma janela para pedir o formulário que corre dentro dela para executar um método com alguns parâmetros.

Vamos usar novamente uma pequena animação para demonstrar o conceito:

blank

Neste exemplo, de dentro de um processo (que poderia ser preventivo) ou de um trabalhador, queremos fazer algo de forma corrente no mesmo processo ou noutro processo.

  • Chamamos o comando CALL FORM e passar o número de referência da janela(ou seja, o valor int longo devolvido pelo Open form window ) no parâmetro de entrada, como o método de projecto que queremos executar(myMethod) com alguns parâmetros.
  • Cria uma mensagem que é afixada de forma assíncrona numa caixa de mensagens associada à janela.
  • O processo de manipulação da janela detecta automaticamente que tem uma mensagem. Recolhe a mensagem e executa o método myMethod e os seus parâmetros.
  • Depois o processo continua a manipular a janela “como habitualmente” (manipulação de eventos como tecla para baixo, rato para baixo, etc.).

Como se pode ver, isto é bastante semelhante ao exemplo anterior sobre trabalhadores.

Demonstração: mensagens entre formulários

Consulte a base de dados de exemplo utilizada para a demonstração com as explicações correspondentes no post da Vanessa sobre o envio de mensagens entre formulários.