Synchronisez facilement vos processus

Traduit automatiquement de Deepl

Les processus préemptifs sont très utiles pour effectuer des calculs importants en parallèle, en utilisant tous les cœurs de votre CPU, mais vous devez parfois déléguer des tâches à un processus coopératif(par exemple, en utilisant une commande non préemptive). Avec la commande New signal vous pouvez mettre en pause un processus et attendre la réponse d’un autre processus !

La commande New signal crée un objet partagé et vous permet de gérer l’interruption et la continuité du processus en cours. Deux méthodes sont disponibles pour cela :

  • attendre()
  • trigger()

Dans l’exemple ci-dessous, nous devons ouvrir un formulaire à partir d’un processus préemptif. Puisque la commande Open form window n’est pas préemptive, le processus principal est appelé pour ouvrir le formulaire, et le processus appelant est mis en attente jusqu’à ce que l’utilisateur entre une valeur.

Tout d’abord, écrivez une méthode qui appelle le processus principal et attendez le résultat :

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+

Ensuite, la méthode OpenForm va réveiller le processus avec la méthode trigger:

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

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

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

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

// Trigger the signal for the waiting process xml-ph-0034@deepl.intetrigger()

Fabrice Mainguené
- Product Owner -Fabrice Mainguené a rejoint l'équipe du programme 4D en novembre 2016. En tant que Product Owner, il est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Après avoir obtenu une licence en informatique au CNAM, Fabrice a rejoint une petite société d'édition de logiciels en tant que développeur Windev. Il a ensuite travaillé pour différentes entreprises dans les domaines de l'industrie et du commerce en tant que développeur Windev et web ainsi que conseiller technique sur les nouvelles fonctionnalités.