編集:問題をよりよく理解し、最初のドラフトに不要な情報がたくさんあったため、質問を少し言い換えました。
ループ スクリプトを開始および停止できるトグル ボタンが必要なスタンドアロン MATLAB アプリケーションを作成しています。
この役立つビデオに基づいて、このアイデアを gui.m ファイルに次のように実装することができました。
function startBtn_Callback(hObject, eventdata, handles)
if get(handles.startBtn,'Value')
set(handles.startBtn,'String','Stop Recording');
else
set(handles.startBtn,'String','Start Recording');
end
while get(handles.startBtn,'Value');
disp('looping..');
pause(.5);
end
このスクリプトは期待どおりに機能しますが、while ループの内容をループしたい関数に置き換えると、ボタンが機能しなくなります。ボタンを押すとまだトグルしますが、コールバックはボタンが最初に押されたときにのみ呼び出されます。最終的なコードは次のようになります。
function startBtn_Callback(hObject, eventdata, handles)
if get(handles.startBtn,'Value')
set(handles.startBtn,'String','Stop Recording');
pause(.1);
else
set(handles.startBtn,'String','Start Recording');
disp('Recording Stopped')
end
while get(handles.startBtn,'Value');
myFunction();
end
開始ボタンを押すと、このコールバックが実行され、ループが開始されます。テキストを変更するには、これpause(.1)
が必要です。一時停止を含めないと、ループが開始されますが、ボタンのテキストは変更されません。
この後、ボタンを押しても何も起こりません。ボタンは GUI でトグルしますstartBtn_Callback
が、呼び出されることはなく、ループは無期限に実行されます。私のエンド ユーザーは MATLAB コンソールにアクセスできないため、これは問題です。
私の関数についてもう少し詳しく説明すると、5 秒間オーディオを録音し、何らかの処理を行ってから、いくつかのグラフを出力するメソッドです。ユーザーが停止を押すまで、このループを無期限に繰り返す必要があります。
myFunction()
問題は、MATLAB が一度に 1 つの関数しか実行できないように見えるため、が実行されているときにコールバックを開始できないことだと思います。最初の例で機能した理由は、ループ呼び出しの間に一時停止があったためです。このプロジェクトの要件は、可能な限りすべての秒を記録することであるため、この一時停止はできません。
このプロセスの信頼できる停止ボタンを作成するにはどうすればよいですか?
MATLAB R2012b 32 ビットを実行しています。