如何使用代码在运行时中止matlab函数?

时间:2014-10-25 16:41:26

标签: matlab

我有一个循环运行的matlab代码。代码非常繁重且耗时。而不是使用Ctrl-C,我正在寻找一种方法来在运行时使用GUI回调中止该功能。我的代码设计如下

function test
  figure;
  uicontrol('pos',[20 20 40 20],'string','abort','fontsize',12, 'callback', 'error(''p'');');
  k=0;
  while(k<10000)
    m=1:10000;
    x = rand(size(m));
    for t=1:10000
        x=x+sin(2*pi*m*0.02 + mod(t, 5)*pi);
    end
    % other code will be run here
    plot(m, x);
    drawnow;
    k=k+1
  end
end

上面的代码就是一个例子。我知道它可以优化但我现在不关心它。我只是想知道为什么上面的代码不起作用。回调中的错误&#39;发出的函数不会中止代码。如何使它工作?感谢。

1 个答案:

答案 0 :(得分:0)

循环内不会调用错误回调。因此,错误回调和循环是独立的进程。

你可以这样设计你的功能:

   function test
      figure;
      AbortButton = uicontrol('Style','togglebutton','pos',[20 20 40 20],'string','abort','fontsize',12);%, 'callback', 'error(''p'');');

      k=0;
      figure;
      while(k<10000)
          val = get(AbortButton,'val');
          if (val == 0)
            m=1:10000;
            x = rand(size(m));
            for t=1:10000
                x=x+sin(2*pi*m*0.02 + mod(t, 5)*pi);
            end
            % other code will be run here
            plot(m, x);
            drawnow;
            k=k+1;
          elseif (val == 1)
              break;
          end
      end
    end

这是一种基本的方法,但可能会有所帮助。