Sincronize facilmente os seus processos

Tradução automática de Deepl

Os processos preventivos são muito úteis para realizar cálculos extensivos em paralelo, utilizando todos os núcleos do seu CPU, mas por vezes é necessário delegar tarefas num processo cooperativo(por exemplo, utilizando um comando não preventivo). Com o comando New signal pode interromper um processo e esperar pela resposta de outro processo!

O New signal cria um objecto partilhado e permite gerir a interrupção e continuidade do processo actual. Dois métodos estão disponíveis para tal:

  • espera()
  • gatilho()

No exemplo abaixo, precisamos de abrir um formulário a partir de um processo preventivo. Uma vez que o Open form window não é preventivo, o processo principal é chamado para abrir o formulário, e o processo de chamada é colocado em espera até que o utilizador introduza um valor.

Primeiro, escrever um método que chama o processo principal e esperar pelo resultado:

C_OBJECT($signal)

// Creation of a signal
$signal :=New signal

// call main process and execute OpenForm method
CALL WORKER (1; "OpenForm";$signal)

// do another calculation
...

// Waiting for the end of the process
$signaled :=$signal.esperar()

// Calculate the results
$calc:=$signal.result +...

Depois o método OpenForm despertará o processo com o método trigger:

C_OBJECT
$signal($1;$signal;$form)

$signal :=$1
$form :=New object("valor";0)

// Open the form and ask the user for a value
$win :=Open form window("Informação";Movable form dialog box)
DIALOG ("Informação";$form)
CLOSE WINDOW ($win)

// Add a new attribute to $signal to pass result to other process
Use ($signal)
$signal .result:=$form.valor
End use

// Trigger the signal for the waiting process trigger()

Fabrice Mainguené
- Proprietário do produto ->p>Fabrice Mainguené juntou-se à equipa do Programa 4D em Novembro, 2016. Como Proprietário do Produto, está encarregado de escrever as histórias dos utilizadores, traduzindo-as depois para especificações funcionais. O seu papel é também o de assegurar que a implementação da funcionalidade entregue vai ao encontro das necessidades do cliente.Após a obtenção da licenciatura em Informática no CNAM, Fabrice juntou-se a uma pequena empresa editora de software como programador Windev. Depois trabalhou para diferentes empresas nas áreas da indústria e comércio como programador Windev e web developer, bem como como consultor técnico sobre novas funcionalidades.