03-10-2017 06:15 AM
基本的なイベントストラクチャの使い方についてご教授をお願いします。
添付のviでは、数値変更に応じてイベントストラクチャを動作させることを試みているのですが、実際に実行してみると数値が変更されているにも関わらずイベントストラクチャが全く反応しません。どのように修正すべきか、アドバイスをお願い致します。
解決済! 解決策の投稿を見る。
03-12-2017 09:24 PM
raido 様
このイベントストラクチャでは、「“数値”の値変更」と「キーダウン」のイベントのみを処理するようにしていますので、それらのイベントが発生するまで待機しています。
そのため、上部のWhileループが回らず停止ボタンが押されても処理はされません。
さまざまな考え方があるとは思いますが、解決策の1つとしてはイベントストラクチャにタイムアウトのイベントケースを追加して、一定時間を越えたらWhileループが回るようにする方法があります。
03-13-2017 12:31 AM
yueno 様
アドバイスありがとうございました。
改めてご質問させて頂きたいのですが、以前添付したviにおいて、数値が変更される度にイベントストラクチャ内の処理を実行させるようにするにはどうすれば良いのでしょうか?
03-13-2017 12:47 AM
数値表示器しかない場合は、プロパティノードの「値(信号)」が使えると思います。このプロパティノードを使用すると値の変更だけでなく、イベントも発生します。
03-13-2017 07:19 AM
yueno様
おかげさまで問題が解決しました。ありがとうございました。
ちなみに、イベント(数値の変更や追加など)に応じて何らかの処理をする方法として、今回お尋ねしたイベントストラクチャを用いる方法の他、キューを用いる方法やノーティファイアを用いる方法もあるようですが、これらはどのように使い分ければ良いのでしょうか?
それぞれのメリット・デメリットについてご教示頂けますと幸いです。
よろしくお願いします。
03-14-2017 12:31 AM
無事解決したようで何よりです。
今回のループ構成で停止ボタンの処理だけなら、添付ファイルのようにイベントケースの処理のみでの停止もできます。
キューとノーティファイアの違いですが、自分は簡潔にまとめると以下のようにとらえています。
・ ノーティファイアには、バッファがないが複数のプロセスでメッセージが読める。
・ キューには、バッファがあるが複数のプロセスでメッセージが読めない。
それぞれの特徴が長所短所につながりますので、それらを使うデータやアーキテクチャによると思います。
たとえば、ファイルメニュー ≫ プロジェクトを作成 から参照できるサンプルでみると、「キューメッセージハンドラ」はキュー関数を応用した方法でループが2つなので、キュー関数のみで処理しています(正確にはエラーによるWhileループ停止です)。
そして、「連続測定とログ」では3つ以上のループが使われており、ノーティファイアで複数プロセスに信号を渡しています。
このようなサンプルと見比べてみてはいかがでしょうか。