Snadná synchronizace procesů

Automaticky přeloženo z Deepl

Preemptivní procesy jsou velmi užitečné pro provádění rozsáhlých paralelních výpočtů s využitím všech jader procesoru, ale někdy je třeba delegovat úlohy na spolupracující proces(např. , pomocí nepreemptivního příkazu). Pomocí New signal můžete pozastavit proces a čekat na odpověď jiného procesu!

Na adrese New signal Příkaz vytvoří sdílený objekt a umožní vám řídit přerušení a pokračování aktuálního procesu. K tomu jsou k dispozici dvě metody:

  • čekat()
  • spustit()

V níže uvedeném příkladu potřebujeme otevřít formulář z preemptivního procesu. Vzhledem k tomu, že Open form window příkaz není preemptivní, je pro otevření formuláře zavolán hlavní proces a volající proces je pozastaven, dokud uživatel nezadá hodnotu.

Nejprve napište metodu, která zavolá hlavní proces a počká na výsledek:

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

Pak metoda OpenForm probudí proces metodou 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.inte.trigger()

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se připojil k týmu 4D Program v listopadu 2016. Jako Product Owner má na starosti psaní uživatelských příběhů, které následně převádí do funkčních specifikací. Jeho úkolem je také zajistit, aby dodaná implementace funkcí splňovala potřeby zákazníků.Po získání bakalářského titulu v oboru informatiky na CNAM nastoupil Fabrice do malé softwarové vydavatelské společnosti jako vývojář Windev. Poté pracoval pro různé společnosti v oblasti průmyslu a obchodu jako vývojář aplikací Windev a webových aplikací a také jako technický poradce pro nové funkce.