我正在开发一个GUI来完成数据的聚类分析。我被要求添加跳过聚类步骤的可能性,因为它可能很长,所以我集成了一个带有回调函数的按钮,它实现了替代计算(在没有聚类的情况下处理数据)。但是,我编写它的方式(我能想到的唯一方法),只有当程序处于等待用户输入的waitfor
循环之一时,才能跳过聚类步骤;一旦启动了聚类计算,该按钮就不再起作用了。
有没有办法可以使用这样的按钮及其相应的回调函数来停止正在进行的计算并用备用操作替换它?我听说过定时器,但即使在阅读timer
MATLAB文档后,我仍然对如何使用它们感到茫然......我能否监控按钮(或任何变量)的状态才能实现?< / p>
答案 0 :(得分:0)
至少您需要一个共享状态,让您向功能指明您要取消。
您可以通过全局变量或其他机制来完成。更简洁的方法是使用类。请参阅以下示例:
Token.m:
classdef Token < handle
properties
Cancel = false;
end
end
longrunningop.m:
function longrunningop(token)
% your long operation goes there...
for i=1:1000
disp('step '), i
pause(0.5)
if token.Cancel
return
end
end
测试脚本:
token = Token;
btn = uicontrol('Style', 'pushbutton', 'String', 'Start',...
'Position', [20 50 50 20],...
'Callback', @(a,b) longrunningop(token));
btn = uicontrol('Style', 'pushbutton', 'String', 'Cancel',...
'Position', [20 20 50 20],...
'Callback', 'token.Cancel = true;');