プロセスの同期を簡単に

Deeplからの自動翻訳

プリエンプティブプロセスは、CPU の全コアを使用して大規模な計算を並列に実行する場合に非常に便利ですが、時にはタスクを協力なプロセス例えば、ノンプリエンプティブコマンドを使用)に委譲する必要があります。この場合 New signalコマンドを使えば、あるプロセスを一時停止して、他のプロセスからの応答を待つことができます!

コマンドは New signalコマンドは、共有オブジェクトを作成し、現在のプロセスの中断と 継続を管理することができます。これには、2つのメソッドが用意されています。

  • wait()
  • トリガー()

以下の例では、プリエンプティブなプロセスからフォームを開く必要があります。コマンドはプリエンプティブではないので Open form windowコマンドはプリエンプティブではないので、フォームを開くためにメインプロセスが呼び出され、ユーザが値を入力するまで呼び出し側のプロセスは保留されます。

まず、メイン処理を呼び出して、結果を待つメソッドを書きます。

C_OBJECT

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

// Creation of a signal
$signal :=New signal// call main process and execute OpenForm method
CALL WORKER (1; "OpenForm";$signal)

// do another calculation

:=$signal.wait()

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

そして、OpenForm メソッドでプロセスを起こし、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éは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。