编辑:我重新表述了我的问题,因为我现在对这个问题有了更好的理解,而且初稿中有很多不必要的信息。
我正在创建一个独立的 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 秒,进行一些处理,然后输出一些图表的方法。我希望这个循环无限期地重复,直到用户按下停止。
我认为问题在于 MATLAB 似乎一次只能运行一个函数,所以在myFunction()
运行时,无法启动回调。它在第一个示例中起作用的原因是循环调用之间存在暂停。我不能有这种停顿,因为项目的要求是记录每一秒。
我怎样才能为这个过程制作一个可靠的停止按钮?
我正在运行 MATLAB R2012b 32 位。