首页 > 解决方案 > 有没有办法让 Matlab 进程在执行过程中输出,这样即使在用户中断后输出也可用?

问题描述

假设func.m我们有

function out = func(in)
    for i=1:1000
        out=i;
    end
end

进入Matlab cmd 后,用户使用+>> out = func;中断命令执行。CtrlC

Global Workspace 中不提供out1 到 1000 之间的某个整数,而不是相等的整数。out如果out在调用之前已定义out = func;,则不会更新。

有没有办法out在用户中断时和执行期间在全局工作区中提供func,只要它在 中定义func

如果有办法,同样的方法是否适用于函数因抛出错误而中断的情况?

(如果获得的便利是关于单个功能,这可能看起来微不足道。毕竟,写入硬盘驱动器并稍后从硬盘驱动器读取始终是一种选择——尽管不是一种有效的选择。多年来,已经有相当多的功能在一个功能对我来说会很方便并提高我的生产力。所以我最后问了。)

标签: matlabkeyboardinterrupt

解决方案


所以这里有一个解决方案,它允许通过按下消息框上的按钮来中断循环......不是 ctrl-c,而是另一种中断循环的方法:

function out=interrupted_loop_example(in) 

f = msgbox('break the loop?') ;

%---------- this is a sample loop:
out=in;
while(~breakloop(f))   
       out=out+1;
end
%--------------------------------

% clean up:
if ishandle(f) ;  delete(f) ;  end %  to kill the msgbox

% helper function
function x = breakloop(f)
    drawnow ;          % allowing matlab to detect a button was pressed
    x = ~ishandle(f) ;  

复制函数,运行它,例如interrupted_loop_example(100),然后在按下按钮时查看答案,基本上决定何时中断循环。这样自然会对性能产生影响,但是您在问题中没有提及任何有关性能的内容。


推荐阅读