在MATLAB中在给定时间执行函数的最可靠方法
我需要在给定的延迟时间执行一个函数。假设我有一个向量[0.5,1,0.6],我希望函数在0.5秒后执行,然后在1秒后执行,最后在0.6秒后执行 到目前为止,我尝试了pause()的组合,但结果远远不准确,我希望在函数中使用pause,因此(及时)处理初始偏移量可能会很麻烦 有没有其他可能允许这样做?如果有高达10毫秒的误差,我真的不在乎 谢谢也许可以在在MATLAB中在给定时间执行函数的最可靠方法,matlab,time,delay,Matlab,Time,Delay,我需要在给定的延迟时间执行一个函数。假设我有一个向量[0.5,1,0.6],我希望函数在0.5秒后执行,然后在1秒后执行,最后在0.6秒后执行 到目前为止,我尝试了pause()的组合,但结果远远不准确,我希望在函数中使用pause,因此(及时)处理初始偏移量可能会很麻烦 有没有其他可能允许这样做?如果有高达10毫秒的误差,我真的不在乎 谢谢也许可以在单发模式下创建一个对象数组,从延迟的累计和计算开始时间: delays = [0.5, 1, 0.6]; startTimes = cumsum(
单发
模式下创建一个对象数组,从延迟的累计和计算开始时间:
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。看看timer类:别忘了删除timer对象。如果主应用程序应该等到所有计时器都被评估后,whileany(strcmpi(T.Running,'on')),暂停(1),结束;删除(T)
可以删除计时器。@Daniel谢谢提醒。在过去,我在GUI中管理计时器时忽略了这个细节,它一直在运行,我不得不退出MATLAB。请注意,这可能取决于计时器回调运行的时间:当计时器回调(或任何句柄图形GUI回调)运行时,不会触发其他事件,包括其他计时器。