我有一个循环运行的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;发出的函数不会中止代码。如何使它工作?感谢。
答案 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
这是一种基本的方法,但可能会有所帮助。