Sincronice fácilmente sus procesos

Traducido automáticamente de Deepl

Los procesos preventivos son muy útiles para realizar cálculos extensos en paralelo, utilizando todos los núcleos de la CPU, pero a veces es necesario delegar tareas a un proceso cooperativo(por ejemplo, utilizando un comando no preventivo). Con el comando New signal puedes pausar un proceso y esperar la respuesta de otro proceso.

El comando New signal crea un objeto compartido y permite gestionar la interrupción y continuidad del proceso actual. Hay dos métodos disponibles para ello:

  • esperar()
  • desencadenar()

En el ejemplo siguiente, necesitamos abrir un formulario desde un proceso preventivo. Como el Open form window no es preventivo, se llama al proceso principal para abrir el formulario, y el proceso que lo llama se pone en espera hasta que el usuario introduzca un valor.

Primero, escribe un método que llame al proceso principal y espera el 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.wait()

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

Entonces el método OpenForm despertará el proceso con el 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("Información";Movable form dialog box)
DIALOG ("Información";$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 xml-ph-0034@deepl.intetrigger()

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se unió al equipo de 4D Program en noviembre de 2016. Como Product Owner, está a cargo de escribir las historias de usuario y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la característica entregada cumple con las necesidades del cliente. Después de obtener una licenciatura en Ciencias de la Computación en el CNAM, Fabrice se unió a una pequeña empresa de publicación de software como desarrollador Windev. A continuación, trabajó para diferentes empresas del sector industrial y comercial como desarrollador de Windev y de la web, así como asesor técnico de nuevas funcionalidades.