2017-05-08 12 views
0

何次のシナリオでのベストプラクティスです:私はループを持っているMATLAB:ループからGUIデータを取得

(例えば、スライダー値の変更)反復はGUIを通じて入力に応答する必要があり、ボタンを押す時と実行時に開始します。これは、そのため、無停電ループでは不可能である作業が、不器用な解決策は、一時停止するように使用することです。この問題に

while true 
    get(handles.slider1,'value') 
    pause(0.5) 
end 

が代替されており、よりエレガントなソリューションを?

編集:明確化、(すなわち、出力はスライダーの値を変更しません)動作しないバリアントとして:

while true 
     get(handles.slider1,'value')  
end 
+0

コントロールに変更が加えられたときにアクションを実行するためにGUIコールバックを利用するのではなく、別のイベントループを使用する必要があるのはなぜですか? – excaza

+0

データの連続ストリームを処理するためにループが必要です。ループ中にGUIコールバックは処理されません(一時停止が含まれていない限り)。たぶん私が気づいていない私の問題のためのループのない解決策があります。それはあなたが指しているものですか? –

答えて

0

あなたはグローバル変数へのスライダーの値を更新することができます。

function slider1_Callback(hObject, eventdata, handles) 
global SliderValue; 
SliderValue = hObject.Value; 

次に任意の機能からSliderValueにアクセスします。

+0

申し訳ありませんが、あなたの答えが私の質問にどのように対処しているか分かりません。私が中断しないループにいる限り、slider1_Callback関数は処理されないため、古いSliderValueにしかアクセスできません。 –

+0

@JohnSmith処理されます。 Guiは別のスレッドで実行されているように見えるので、ループ中にGuiは引き続き応答できます。しかし、guidataを使用することはできません。なぜならループ内では、他の関数でguidataを更新することはできますが、ループは古いデータを使用し続けるからです。 – Anthony

+0

はい、あなたは技術的に正しいです。しかし、あなたが言ったように、guidataは、問題の中核である古いデータだけを取得します。 –

関連する問題