プロセス間のメッセージのやり取り

4D v15 R5 では、プロセス間、およびプロセスとフォーム間の情報交換をおこなうためのシンプルで強力な新しい方法が導入されました。この機能は、非同期メッセージングシステムに基づいており、プロセスやフォームを呼び出して、それぞれのコンテキストで引数とともにメソッドを実行するよう要求することが可能です。

ワーカープロセス

ワーカーはメッセージ ボックスを持ちます。ワーカープロセスは初回使用時に作成され、その関連プロセスも初回使用時に自動的に起動されます。”New process” コマンドとは異なり、ワーカープロセスはメソッドの実行終了後も生き続けます。

ワーカーは、大きなジョブをチャンク化して処理するために自分自身を呼び出すことができます。ワーカーは、インタープロセス変数や、並列非同期処理のためのセマフォーの必要性を激減させます。プリエンプティブ・マルチスレッディングにはワーカーが必要です。しかし、ワーカーはコオペラティブプロセスでも使えるので、32ビットやインタプリター環境でも有用です。

2つの新しいコマンドが提供されています:

  • CALL WORKER” は、プロジェクトメソッド名と任意の引数をメッセージにカプセル化し、ワーカーのメッセージボックスに投稿します。

CALL WORKER(プロセス名|プロセス番号;プロジェクトメソッド名;param1;…;paramN)

  • KILL WORKER” は、指定されたワーカーに、保留中のメッセージを忘れて終了するように求めるメッセージを投稿します。

KILL WORKER(なし|プロセス名|プロセス番号)

新機能のデモとして、サンプルデータベースを用意しました:

データベース例 (英語)

CALL FORM

さて、ウィンドウ内で実行されている各フォームには、メッセージボックスがあります。”CALL FORM” を使用すると、ウィンドウを所有するプロセスに関係なく、ウィンドウに表示されているフォームのコンテキストでプロジェクトメソッドを引数付きで実行できます。

このコマンドにより、”CALL PROCESS” をインタープロセス変数と一緒に使ってメッセージを渡す方法は時代遅れとなります。”CALL FORM” をフォームのコンテキスト内で使用して、処理をスタックまたはチャンク化するために自分自身を呼び出すことができます。これにより、SET TIMER(1) のような回避策が不要になります。プリエンプティブなプロセスでは必要なコマンドですが、コオペラティブプロセスや32ビット環境、インタプリター環境でも使用可能です。

シンタックスは以下の通りです:
CALL FORM (ウィンドウ参照;プロジェクトメソッド名;param1;…;paramN)

CALL WORKER” と同様に、”CALL FORM” はメソッド名と引数をメッセージにカプセル化し、フォームのメッセージボックスに投稿します。そして、フォームはそのメッセージを自身のプロセスで実行します。

新しい機能のサンプルデータベースです:

データベース例 (英語)

詳細は、4D v15 R5 アップグレードマニュアル (英語) をご覧ください。

Vanessa Talbot
- プロダクトオーナー - Vanessa Talbotは、2014年6月に4Dプログラムチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。入社以来、4Dにおける主要機能の定義に関わってきました。プリエンプティブ/マルチスレッドの新機能の大部分と、非常に複雑なテーマである組み込みアプリケーションの新アーキテクチャに取り組んできました。VanessaはTelecom Saint-Etienneで学位を取得後、Criminal Research Institute でオーディオビジュアル部門の開発者としてキャリアをスタートさせました。また、メディアや医療の分野でも、技術サポートやプロダクションの分野で働いてきました。