我有一个单击按钮时运行的函数,该函数将调用另一个函数来执行绘图,这是一个由一系列循环组成的动画。问题是,在程序运行后,除非按下Ctrl + C然后导致整个.exe失败并需要重新打开它,否则无法停止。
我想制作一个Reset按钮,以便停止循环运行,但是如何将一个新变量从中断传递到堆栈上方两级的现有函数?
谢谢
edit @ 22:13 27/3/2011(UKT)
我想要做的更清楚:
function push_calculate_Callback(hObject, eventdata, handles)
(List of parameters read in the GUI)
fmain(list of paramters required to pass to the function, fmain)
这是直接链接到GUI的代码的第一部分,fmain看起来像:
function fmain(List of parameters)
(List of calculations...)
fplotting(list of paramters for plotting)
其中fplotting是动画来自fplotting的内容:
function fplotting(list of parameters)
for i = 1:(end)
(do the animation plot)
end
这是我按下重置按钮时要停止的循环。如果有人在动画正在进行(循环)时按Ctrl + C,它将发出错误,exe文件将崩溃并需要重新打开它。所以当有人按下重置按钮时,我希望能够阻止它。
如果我使用持久性,新值,在我按下重置按钮后,它将不会进入现有循环并打破循环...看起来我正在寻找一种方法来更新参数后我改变它在函数之外
由于
答案 0 :(得分:0)
使用exit或quit退出程序
要停止循环运行,可以使用break或函数返回..
答案 1 :(得分:0)
您最好的选择可能是使用PERSISTENT变量,其状态在函数2的循环的每次迭代中检查,并且您在“reset”-callback中修改其值。
重置回调
function reset_callback(hObj,eventdata,handles)
%# "activate" persistent variable
persistent breakThis
%# set it to 1
breakThis = true;
循环功能
function functionWithTheLoop(someInput)
...
%# "activate persistent variable
persistent breakThis
...
%# start loop
for iter = 1:numOfIterations
%# check whether you need to break out of the loop
if breakThis
%# reset the function value
breakThis = false;
break;
end
...
end
答案 2 :(得分:0)
您可以使用应用数据信息,即setappdata
和getappdata
:
% animation loop function
function loop(hFig)
setappdata(hFig, 'run', true); % here or somewhere else...
while(getappdata(hFig, 'run'))
plot(....);
end
end
% GUI stop-loop btn callback
function stop(hFig)
setappdata(hFig, 'run', false);
end
我想这会奏效。