如何在MatLab图形界面中停止执行

如何在MatLab图形界面中停止执行,matlab,matlab-guide,Matlab,Matlab Guide,有时我的程序运行时间太长,所以我想知道用户是否可以随时从图形界面停止程序 我尝试过,但是当程序运行一个函数时,它不会读取另一个函数(例如,用户会说它停止的函数)。Matlab中的停止运行命令是ctrl+c或ctrl+break,但是如果程序导致Matlab崩溃,它可能不会接受这些命令,您必须强制关闭程序。运行程序时,在命令窗口中尝试ctrl+c,它将停止执行 嗯。。。图形界面是否花费的时间太长?您可以尝试在代码之间添加中断,以确定是什么减慢了进程。在开始时添加tic,并在需要计时的位置添加toc

有时我的程序运行时间太长,所以我想知道用户是否可以随时从图形界面停止程序


我尝试过,但是当程序运行一个函数时,它不会读取另一个函数(例如,用户会说它停止的函数)。

Matlab中的停止运行命令是ctrl+c或ctrl+break,但是如果程序导致Matlab崩溃,它可能不会接受这些命令,您必须强制关闭程序。运行程序时,在命令窗口中尝试ctrl+c,它将停止执行


嗯。。。图形界面是否花费的时间太长?您可以尝试在代码之间添加中断,以确定是什么减慢了进程。在开始时添加tic,并在需要计时的位置添加toc。

如果您确实需要类似于停止按钮的按钮,唯一的选择是在长期运行的流程中执行检查,该检查经常询问是否应该停止

一个小小的反例:

function teststop
    f = figure('pos', [0,0,200,100],...
        'menubar', 'none',...
        'toolbar', 'none');
    movegui(f, 'center');

    c = uiflowcontainer(f, 'FlowDirection', 'topdown');
    uicontrol(c, 'style', 'pushbutton', 'string', 'start', 'callback', @start);
    uicontrol(c, 'style', 'pushbutton', 'string', 'stop', 'callback', @stop);
end

function start(hObject,~)
    fig = ancestor(hObject, 'figure');
    setappdata(fig, 'stop', false);

    % disable another start
    set(hObject, 'Enable', 'inactive');    

    count = 0;
    % increment counter as long as we're not told to stop
    while ~getappdata(fig, 'stop')
        count = count+1; 
        % a tiny pause is needed to allow interrupt of the callback
        pause(0.001); 
    end
    fprintf('Counted to: %i\n',count);

    % re-active button
    set(hObject, 'Enable', 'on');
end

function stop(hObject, ~)
    disp('Interrupting for stop');
    % set the stop flag:
    setappdata(ancestor(hObject, 'figure'), 'stop', true);    
end
只需将其保存到
teststop.m
并运行即可。 请注意,在任何情况下都需要暂停(0.001),以便中断回调。如果没有暂停呼叫,上述操作将无法工作

停车检查当然需要时间,所以我建议检查不要太频繁


或者,如果您的处理是周期性的,比如等待输入或其他事情发生,那么您可以使用
计时器来实现它,该计时器可以轻松停止。

我认为问题在于图形界面的用户。他不能按ctrl+c。。。