エラー 1122: キュー関数の使用時にエラーが発生する

更新しました Nov 16, 2023

使用製品

ソフトウェア

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

問題

要素をエンキュー、先頭に要素をエンキュー、キュー要素をプレビュー、プレビューキュー要素、要素をデキューまたはキュー解放関数を使用すると、以下エラーが発生します。
 

エラーコード1122が不明位置で発生

考えられる理由:
LabVIEW: ノードがRefnumを待機中にRefnumが無効になりました。

 

この問題を解決するにはどうすればよいですか?

解決策

このエラーを回避するには、キューのリファレンスを解放する前に、キューを参照するすべてのプロセスまたはスレッドが停止していることを確認します。たとえば、下図のように生産者/消費者デザインパターンのテンプレートをキュー関数だけでなくノーティファイア関数も使用するように変更すると、エラー1122が発生しなくなります。

 

ノーティファイア関数は、停止ボタンの状態を消費者ループに送信します。エラー結合ノードを利用することで、キューのリファレンスが解放される前に生産者ループと消費者ループの両方が停止するようにします。


メモ: 消費者ループ内にある要素をデキュー関数にタイムアウト値を指定しない場合、このコードはハングします。

追加情報

このエラーは通常、前にリストしたキュー関数または操作の1つが、すでに閉じられているリファレンスを操作しようとしたときに発生します。リファレンスを実行する必要がある他のすべての関数の後にのみ、必ずリファレンスを閉じるようにします。このリファレンスは一度だけ閉じる必要があることにも注意が必要です。
 

LabVIEWの新規>>テンプレート>>デザインパターンに含まれている生産者/消費者デザインパターン(データ)は、消費者ループを停止するために意図的にこのエラーを利用しています。停止ボタンをクリックすると、生産者ループが終了して、キューのリファレンスが解放されます。消費者ループの次の反復では、解放されたキューリファレンスからキューを解除しようとします。これによりエラー1122が発生し、ループが停止します。