在Matlab中,函数可以在事件中启动,但偶尔会像调整大小函数一样,以快速的顺序调用事件,并且连续多次调用函数,这会导致奇怪的行为和滞后。有没有办法让它监听事件,但只能在一个时间范围内的最后一个事件上执行,例如.5秒?
我尝试使用一个持久变量,每个变量都会更新,只有当变量仍然等于它们在.5秒后设置的变量时才会运行,但这不起作用。有没有什么干净的方法可以用Matlab或任何我可以从中窃取想法的语言来做到这一点?
编辑: 例如,这里是我尝试的持久变量方法的实现:
function practice
a = uipanel('ResizeFcn',@Delay,'Units','Normalized');
uicontrol(a)
end
function Delay(s,cb)
persistent a
if isempty(a)
a = 0;
end
a = a+1;
b = a;
pause(.1);
if b~=a
%disp(a-b)
else
%do work here
end
end
这种方法似乎并不常用,但这可能只是因为在pause()中使用了幻数。如果没有深度阅读,它的作用也很不清楚。
答案 0 :(得分:2)
&#34>奇怪的行为和滞后"你看,几乎总是因为回调中断了对方的执行,并且重复了不必要的相同回调堆的执行。
为避免这种情况,您通常可以将控件/组件的Interruptible
属性设置为'off'
而不是默认'on'
,并将BusyAction
属性设置为{ {1}}而非默认'cancel'
。
这不会解决所有这些问题(例如,您可能需要回复需要响应速度太快而无法跟上的实时数据Feed的回调),但在很多情况下它都会出现问题。是正确的方法。特别是对于'queue'
回调的情况,这意味着回调只会在它尚未运行的情况下被调用,因此停止任何堆回的回调以及相同功能的任何效果一次跑两次。