我需要在给定的延迟时间执行一个函数。假设我有一个向量[0.5,1,0.6],我希望函数在0.5秒后执行,然后在1秒后执行,最后在0.6秒后执行。
到目前为止,我已尝试过pause()的组合,但结果远非准确,我想在函数内部使用暂停,因此处理我的初始偏移(及时)可能很麻烦
还有其他可能性吗?如果误差范围高达10ms,我真的不在乎。
由于
答案 0 :(得分:2)
也许在singleShot
模式下创建一个timer
对象数组,开始时间根据延迟的累积总和计算:
delays = [0.5, 1, 0.6];
startTimes = cumsum(delays);
timerFcn = @(~,thisEvent) disp([thisEvent.Type ' executed '...
datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
for ii=1:numel(delays),
T(ii) = timer('StartDelay',startTimes(ii),'TimerFcn',timerFcn,...
'ExecutionMode','singleShot');
end
然后您可以同时启动所有计时器:
>> start(T); fprintf('Launching timers: %s\n',datestr(now,'dd-mmm-yyyy HH:MM:SS.FFF'))
Launching timers: 21-Mar-2014 12:14:46.780
TimerFcn executed 21-Mar-2014 12:14:47.280
TimerFcn executed 21-Mar-2014 12:14:48.280
TimerFcn executed 21-Mar-2014 12:14:48.880
这似乎相当准确。
现在,不要打电话给disp
来打印日期和时间,而是启动你的功能。
编辑:不要忘记删除计时器(delete(T)
)和/或停止计时器,特别是如果在GUI中创建计时器,否则它们将继续运行。感谢提醒,@丹尼尔。