【发布时间】:2011-09-22 17:38:29
【问题描述】:
所以,我有一个基本上允许用户迭代处理数据的 GUI。因此,有一个开始/停止按钮和一个显示数据当前状态的显示器。当点击开始按钮时,回调函数调用如下所示的数据处理函数:
function result = process_data(data)
result = 0;
for big_loop=big_start:big_end
for small_loop=small_start:small_end
result = result+data; %in reality just some fancier matrix ops
end
end
我的问题是如何实现停止按钮的回调,以便在小循环的当前迭代之后从 process_data 返回。
现在我通过将 process_data 代码修改如下来做到这一点:
function result = process_data_new(data)
result = 0;
for big_loop=big_start:big_end
for small_loop=small_start:small_end
result = result+data; %in reality just some fancier matrix ops
%new code start -----------------
if interrupt_flag
return;
end
%new code end --------------------
end
end
但是,我真的希望从 GUI 端处理中断,这样我的代码就不会被中断检查乱七八糟(我的真实代码会经常非常涉及这种事情,并且用户有时需要更改 process_data 函数)。
这可能吗?我想这将涉及使所有循环变量成为“可观察”属性,然后等待 small_loop 更改,但我无法弄清楚如何实现回调的细节。
【问题讨论】:
-
这是我想到的解决方案的充实版本:使 small_loop 成为一个可观察的属性,然后为它创建一个处理程序(每当值更改时调用)。这个处理程序只会寻找interrupt_flag,如果为真,那么它将杀死/返回process_data函数。最后一点是我不确定的部分......
-
另外,部分解决方案是让按下停止导致计算挂起,直到再次按下开始按钮。
标签: user-interface matlab callback control-flow