在 Matlab 中,函数可以在事件中启动,但有时,如调整大小函数,事件会快速调用,并且函数会连续调用多次,这可能会导致奇怪的行为和滞后。有没有办法让它监听事件但只在一个时间范围内的最后一个事件上执行,例如.5秒?
我尝试使用一个持久变量,每个变量都会更新,并且只有在该变量在 0.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() 中使用了魔数(Magic Number)。如果不深入阅读,也不清楚它的作用。
最佳答案
您看到的“奇怪的行为和滞后”几乎总是回调相互中断执行的结果,并且重复执行不必要的相同回调堆积。
为了避免这种情况,您通常可以将控件/组件的 Interruptible
属性设置为 'off'
而不是默认的 'on'
,并将 BusyAction
属性设置为 'cancel'
,而不是默认的 'queue'
。
这并不能解决所有此类问题(例如,您可能有一个回调需要响应运行速度太快而无法跟上的实时数据源),但对于许多情况来说,这是正确的方法。特别是对于 ResizeFcn 回调的情况,这意味着只有在尚未运行时才会调用回调,因此可以阻止回调的任何堆积,以及同一函数运行的任何影响一次两次。
关于matlab - 函数等待执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983387/