Einfaches Synchronisieren Ihrer Prozesse

Automatisch übersetzt von Deepl

Präemptive Prozesse sind sehr nützlich für die parallele Durchführung umfangreicher Berechnungen, bei denen alle Kerne Ihrer CPU genutzt werden, aber manchmal müssen Sie Aufgaben an einen kooperativen Prozess delegieren(z. B. mit einem nicht präemptiven Befehl). Mit dem New signal Befehl können Sie einen Prozess anhalten und auf die Antwort eines anderen Prozesses warten!

Der Befehl New signal Befehl erstellt ein gemeinsames Objekt und ermöglicht es Ihnen, die Unterbrechung und Fortführung des aktuellen Prozesses zu verwalten. Hierfür stehen zwei Methoden zur Verfügung:

  • wait()
  • trigger()

Im folgenden Beispiel müssen wir ein Formular von einem präemptiven Prozess aus öffnen. Da der Open form window Befehl nicht präemptiv ist, wird der Hauptprozess aufgerufen, um das Formular zu öffnen, und der aufrufende Prozess wird angehalten, bis der Benutzer einen Wert eingibt.

Schreiben Sie zunächst eine Methode, die den Hauptprozess aufruft und auf das Ergebnis wartet:

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+...

Dann wird die Methode OpenForm den Prozess mit der Methode trigger aufwecken:

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é gehört seit November 2016 zum 4D Program Team. Als Product Owner ist er verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Seine Aufgabe ist es auch, sicherzustellen, dass die gelieferte Funktionsimplementierung den Kundenanforderungen entspricht.Nach seinem Bachelor-Abschluss in Informatik am CNAM arbeitete Fabrice als Windev-Entwickler bei einem kleinen Software-Verlag. Danach arbeitete er für verschiedene Unternehmen in Industrie und Handel als Windev- und Webentwickler sowie als technischer Berater für neue Funktionen.