非同期で呼び出すVIのリファレンスを開く際、VIの結果を後で収集するかどうかを決定する必要があります。このトピックでは、非同期の「呼び出して収集」VI呼び出しを開始し、後で結果を収集する方法を説明します。この用途モデルは、他のプログラミング言語で「fork AND join」と呼ばれています。また、VIを呼び出して、結果を収集しないこともできます。

使用するオブジェクト

VIの非同期呼び出しを開始した後、VIの出力を収集するには、次のブロックダイアグラムオブジェクトを使用します。

解決方法

VIを非同期で呼び出した後で結果を収集するには、次のブロックダイアグラムを作成します。



以下のリストには、前のダイアグラムについての重要な情報が記載されています。

メモ 「VIリファレンスを開く」関数の各オプションフラグ (16進数形式) は、『LabVIEWヘルプ』に記されています。このため、正しい値が渡されるように、数値定数入力の表記形式を必ず16進数形式に変更してください。

注意とアドバイス

  • VIの中断―この用途パターンにおいてVIを中断する場合は、次のような影響を考慮する必要があります。
    • 呼び出して収集VIリファレンスを開くVIを中断した場合、リファレンスは自動的に閉じ、実行中のVIのインスタンスはすべて中断されます。
    • 呼び出して収集VIリファレンスのあるインスタンスを中断した場合、1つの非同期呼び出しを待機ノードからのみ、呼び出されたVIが中断されたというエラーが返されます。同じVIリファレンスの呼び出しを待機している他のすべての非同期呼び出しを待機ノードは、そのまま待機し続けます。
    • 呼び出して収集VIリファレンスの中断メソッドを呼び出した場合、VIの現在実行中のインスタンスすべてが中断されます。非同期呼び出しを待機ノードの数と同数のエラーが返されます。
  • 呼び出して収集VIリファレンスを開いたVIが実行を終了すると、リファレンスは自動的に閉じ、実行中のVIのインスタンスはすべて中断されます。
  • 同じVIリファレンスに対して複数の非同期呼び出しを開始した場合、特定の非同期呼び出しを待機ノードに出力を返すVI呼び出しを直接識別することはできません。返されたVIのインスタンスを識別する必要がある場合は、VI呼び出しに識別子を割り当てます。

応用:固有のVIリファレンスへの複数の呼び出しからの出力を収集する

次のブロックダイアグラムは、複数のVIを非同期で呼び出し、後に出力を収集する場合のテンプレートです。各非同期呼び出しが固有のVIリファレンスに関連付けられているため、非同期呼び出しを待機ノードは、それぞれ特定のVI呼び出しが終了するのを待機します。このテンプレートは、ユーザインタフェースを作成して、別のサブVIのフロントパネルをサブパネルとして表示する場合に特に役立ちます。



サンプル

VIを非同期に呼び出し、結果を後から収集するサンプルについては、labview\examples\Application Control\VI Server\Asynchronous Call By ReferenceディレクトリのAsynchronous Call and Collect VIを参照してください。