函数等待执行
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
回调的情况,这意味着只有当回调尚未 运行 时才会调用回调,因此停止回调的任何堆积,以及同一函数的任何效果运行 一次两次。
在 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
回调的情况,这意味着只有当回调尚未 运行 时才会调用回调,因此停止回调的任何堆积,以及同一函数的任何效果运行 一次两次。