使用GUI时,MATLAB退出函数循环

时间:2011-03-27 12:11:39

标签: user-interface matlab loops stack exit

我有一个单击按钮时运行的函数,该函数将调用另一个函数来执行绘图,这是一个由一系列循环组成的动画。问题是,在程序运行后,除非按下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文件将崩溃并需要重新打开它。所以当有人按下重置按钮时,我希望能够阻止它。

如果我使用持久性,新值,在我按下重置按钮后,它将不会进入现有循环并打破循环...看起来我正在寻找一种方法来更新参数后我改变它在函数之外

由于

3 个答案:

答案 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)

您可以使用应用数据信息,即setappdatagetappdata

% 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

我想这会奏效。