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 アップグレードマニュアル (英語) をご覧ください。