4Dサミット2016。Laurent Esnault氏、先制モードでの作業者とUIを紹介

Deeplからの自動翻訳

当社のエンジニアリング担当副社長であるLaurent Esnaultが、Break Out Sessionで、複数のプロセス間およびプロセスとフォーム間の情報交換について説明しています。4D Summit 2016のBreak Out Session:Preemptive Multi-threadingで、複数のプロセス間、およびプロセス間の情報交換について説明しています。プリエンプティブ・マルチスレッディングのおかげで、デスクトップまたはWebアプリケーションのいずれでも、より多くの並列プロセスを持つことができ、その結果、より多くのユーザーを追加することができます。

4D Summit 2016のLaurentのセッションを見逃した方は、この15分間のビデオを見て、プリエンプティブ・マルチスレッディングのマスターによる個人的なトレーニングを楽しんでください!

前提条件

プリエンプティブ・マルチスレッディングを利用するためには

でも、怖がらないでください!強力で簡単な解決策をいくつか用意しましたので、実例とともに詳しく紹介します。

プロセス間で情報を共有する方法

プリエンプティブモードでプロセス間変数がない場合、プロセス間でどのように情報を共有するのでしょうか?そこで、新しい概念を導入します。「ワーカー “です。しかし、ワーカーとは一体何なのでしょうか?

よくぞ聞いてくれました!これは、メッセージの実行に特化したプロセスに関連付けられたメッセージボックスです。を使えば CALL WORKERコマンドを使うと、あるプロセスから別の プロセスにメッセージを送ることができます(情報を送ったり、何かをするように要求したりする)。このコマンドのシンタックスは New process例えば、任意のパラメータやプロジェクトメソッドを渡すことができます。

小さなアニメーションを使って、その仕組みをよりよく理解しましょう。

この例では、アプリケーションプロセスからmyWorkerプロセスに情報を渡したいのです。アプリケーション プロセスは実行中で、myWorkerプロセスは一時停止しています。

  • アプリケーションの処理では CALL WORKERコマンドを呼び出してmyWorkerにいくつかのパラメータを渡し、myWorkermyMethodプロジェクト メソッドを実行させます。
  • アプリケーション プロセスは実行中で、myWorker プロセスは一時停止しており、myWorkerプロセス専用のメッセージ ボックスに非同期に投稿されるメッセージを作成します。フラグが立っているので、ワーカーは自動的に覚醒してメッセージを受け取り、内容(パラメータ)を取り出してmyMethod を実行します。
  • myWorkerプロセスがmyMethod の実行を終了しても、プロセスは終了しません。ただ一時停止して、実行する別のメッセージを待ちます。コマンドとの主な違いです。 New processコマンドとの主な違いは、プロセスを作成し、いくつかのパラメータを指定してメソッドを実行し、その後終了することです。

では、Worker はいつ死ぬのでしょうか?基本的には、アプリケーションを閉じたとき、または KILL WORKERコマンドを呼び出したときに死にます。突然プロセスを終了させるのではなく、Worker に自殺するようにメッセージを送るだけです。

デモです。ワーカー

デモに使用したデータベースの例と、それに対応するVanessa のワーカーに関する投稿をご覧ください。

プリエンプティブプロセスからユーザーインターフェースにアクセスする方法

先ほど、プリエンプティブ・プロセスからユーザー・インターフェースにアクセスすることはできないと述べました。もちろん、それに対する解決策を提供する必要がありました。そこで CALL FORMコマンドを導入しました。このコマンドは CALL WORKERコマンドに似ています。しかし、今回は、プロセスに関連するメッセージボックスではなく、ウィンドウに関連するメッセージボックスです。

CALL FORMを使うと、ウィンドウにメッセージを送り、その中で動作しているフォームに、いくつかのパラメータを持つメソッドを実行するように要求することができます。

もう一度、小さなアニメーションを使って概念を示してみましょう。

blank

この例では、プロセス (プリエンプティブ) またはワーカーから、同じプロセスまたは別のプロセスで実行中のフォームに何かを実行したいとします。

  • 私たちは CALL FORMコマンドを呼び出し、入力パラメータにウィンドウ参照番号(つまり、コマンドによって返されたlong int値) を渡します。 Open form windowを入力パラメータとして渡し、実行したいプロジェクトのメソッド(myMethod) といくつかのパラメータを渡します。
  • これは、ウィンドウに関連付けられたメッセージボックスに非同期に投稿されるメッセージを作成します。
  • ウィンドウを扱うプロセスは、メッセージがあることを自動的に検出します。そして、そのメッセージを受け取り、myMethod メソッドとそのパラメータを実行します。
  • その後、プロセスは「通常通り」ウィンドウを処理し続けます (キーダウン、マウスダウンなどのイベントを処理します)。

見ての通り、これはワーカーに関する前の例とかなり似ています。

デモ: フォーム間のメッセージング

Vanessa のフォーム間のメッセージ ングに関する投稿で デモに使用したデータベースの例とそれに対応する説明を確認してください。