函数等待执行

function wait to execute

在 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() 中使用了幻数。如果不深入阅读,它的作用也很不清楚。

您看到的 "weird behavior and lag" 几乎总是回调相互中断执行的结果,并且相同回调的重复不必要执行堆积起来。

为避免这种情况,您通常可以将 control/component 的 Interruptible 属性 设置为 'off' 而不是默认的 'on',并设置BusyAction 属性 到 'cancel' 而不是默认的 'queue'.

这并不能解决所有此类问题(例如,您可能有一个回调需要响应实时数据馈送,但 运行 速度太快无法跟上),但对于许多人来说在某些情况下这是正确的方法。特别是对于 ResizeFcn 回调的情况,这意味着只有当回调尚未 运行 时才会调用回调,因此停止回调的任何堆积,以及同一函数的任何效果运行 一次两次。