イベントストラクチャを使うとユーザインターフェイスが固まるのはなぜですか?



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題:
イベントストラクチャを使うとユーザインターフェイスが固まるのはなぜですか?

解決策:
LabVIEW 6.1 では、イベントストラクチャで使用するオブジェクトは、静的に登録されます。イベントストラクチャに、動的にオブジェクトを登録する機能は実装されていません。オブジェクトを静的に登録すると、VI 実行中、フロントパネル上のすべてのオブジェクトが登録され、VI 内のひとつのイベントストラクチャが処理します。フロントパネル上の登録済のオブジェクトのどれかひとつでイベントが起こると、イベントストラクチャが処理するまで、フロントパネルが固まります。もしイベントストラクチャが、登録されたオブジェクトを処理しないと問題が起こります。

フロントパネル上の登録済オブジェクトにイベントが起こったにも関わらず、そのイベントを処理するイベントストラクチャがない場合、イベントストラクチャが動き出すか、VI を強制的に停止するまで、フロントパネル上のすべてのオブジェクトが固まります。これは、イベントストラクチャが別のイベントストラクチャの中にあるときに起こりうる現象です。外側のイベントストラクチャがすべてのユーザインターフェイスをロックし、内側のイベントストラクチャにアクセスできなくなるのです。

イベントストラクチャの動作を正確に説明する代わりに、ここでは予想に反してに固まる VI の例を紹介します。

Nested Event VI は、ネストしたイベントを使えないかの例です。イベントストラクチャが呼び出されたとき、フロントパネル上のすべてのオブジェクトが固まり、イベントストラクチャ内に入っている別のイベントストラクチャは動きません。VI がイベント処理中には、どのフロントパネル上のオブジェクトもイベントを作ることができないからです。

Outside While Loop VI では、イベントストラクチャが while ループの外側にあるとき、何が起こるかを見ることができます。イベントストラクチャをループの外側に配置することはお勧めできません。一旦、イベントストラクチャが呼び出されてから、イベントストラクチャが処理しているフロントパネル上のオブジェクトに触れると、すべてのフロントパネルが固まります。

Sequence VI はイベントストラクチャがシーケンスストラクチャ内にあると、どうなるかの例です。

これら 3 つの VI は以下からダウンロードできます。

関連リンク:
Developer Zone Tutorial: Event-Driven Programming in LabVIEW

添付:


Lockup Examples.zip - Lockup Examples.zip


報告日時: 05/28/2002
最終更新日: 12/21/2011
ドキュメントID: 2LRE8H2G