Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中在给定时间执行函数的最可靠方法_Matlab_Time_Delay - Fatal编程技术网

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

在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(

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

到目前为止,我尝试了pause()的组合,但结果远远不准确,我希望在函数中使用pause,因此(及时)处理初始偏移量可能会很麻烦

有没有其他可能允许这样做?如果有高达10毫秒的误差,我真的不在乎

谢谢

也许可以在
单发
模式下创建一个对象数组,从延迟的累计和计算开始时间:

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回调)运行时,不会触发其他事件,包括其他计时器。