在MATLAB中在给定时间执行函数的最可靠方法

时间:2014-03-21 18:52:53

标签: matlab time delay

我需要在给定的延迟时间执行一个函数。假设我有一个向量[0.5,1,0.6],我希望函数在0.5秒后执行,然后在1秒后执行,最后在0.6秒后执行。

到目前为止,我已尝试过pause()的组合,但结果远非准确,我想在函数内部使用暂停,因此处理我的初始偏移(及时)可能很麻烦

还有其他可能性吗?如果误差范围高达10ms,我真的不在乎。

由于

1 个答案:

答案 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中创建计时器,否则它们将继续运行。感谢提醒,@丹尼尔。