我需要在给定的延迟时间执行一个函数。假设我有一个向量 [0.5,1,0.6],我希望该函数在 0.5 秒后执行,然后在 1 秒后执行,最后在 0.6 秒后执行。
到目前为止,我已经尝试了暂停()的组合,但结果远不准确,我想在函数内部使用暂停,因此初始偏移量(及时)的处理可能很麻烦.
还有其他可能性可以做到这一点吗?如果误差幅度高达 10 毫秒,我并不关心。
谢谢
最佳答案
也许创建一个 timer
的数组singleShot
模式下的对象,其开始时间是根据延迟的累积总和计算的:
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 中创建的,否则它们将继续运行。感谢您的提醒,@Daniel。
关于matlab - 在 MATLAB 中给定时间执行函数的最可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567228/