有没有什么办法从MATLAB中的计时器对象的每个周期开始提取经过的时间? 说我们有一个计时器对象是这样的:如何从MATLAB中的计时器对象中提取已用时间?
t=timer('ExecutionMode', 'fixedRate', ...
'Period', 15, ...
'TimerFcn',@(x,y)disp('Hello World!'))
有没有什么办法从MATLAB中的计时器对象的每个周期开始提取经过的时间? 说我们有一个计时器对象是这样的:如何从MATLAB中的计时器对象中提取已用时间?
t=timer('ExecutionMode', 'fixedRate', ...
'Period', 15, ...
'TimerFcn',@(x,y)disp('Hello World!'))
使用tic
,toc
和'UserData'
没有直接的方法对timer
-object读取自最后一次通话所经过的时间方法。有可能使用tic
和toc
的构造来实现你想要的。
通用字段'UserData'
可用于将用户数据添加到计时器对象。我们可以用set()
来写这个值,并用get()
来读取它。因此,我们在回调函数中将此值设置为tic
,稍后返回以使用toc
计算时间差。
更具体地说,这里是回调函数:
function timerCallback(timerObj,event) %#ok<INUSD>
disp('Hello World!');
set(timerObj,'UserData',tic);
现在我们可以编写一个包装函数来获取经过时间:
function retval = getElapsedTime(timerObj)
retval = toc(get(timerObj,'UserData'));
的建议用法示例的方法
要看这个方法是否w orks,我们使用pause
等待for循环并且大约每秒钟读取经过的时间。下面是一个完整的例子:
function timer_example
t = timer('ExecutionMode', 'fixedRate', ...
'Period', 5, ...
'TimerFcn', @timerCallback); % create timer
start(t); % start timer
pause on; % make sure pause can be used
for i = 1:10
pause(1); % wait a second
disp(getElapsedTime(t)); % display the elapsed time
end
stop(t); % stop timer
delete(t); % delete timer
function timerCallback(timerObj,event) %#ok<INUSD>
disp('Hello World!');
set(timerObj,'UserData',tic);
function retval = getElapsedTime(timerObj)
retval = toc(get(timerObj,'UserData'));
这给出了以下的输出:
>> timer_example
Hello World!
1.0163
2.0173
3.0235
4.0285
Hello World!
0.0366
1.0390
2.0427
3.0461
4.0470
Hello World!
0.0515
的y
包含绝对时间戳。保存它时,定时器规定,并采取区别:
function my_callback(m,x,y)
persistent starttime
switch m
case 'start'
starttime=y.Data.time;
case 'timer'
disp(datenum(y.Data.time-starttime)*24*60*60);
otherwise
error('unknown argument');
end
end
具有定时功能:
t=timer('ExecutionMode', 'fixedRate','Period', 15,'StartFcn',@(x,y)my_callback('start',x,y),'TimerFcn',@(x,y)my_callback('timer',x,y))
start(t)
替代解决方案使用用户数据:
t=timer('ExecutionMode', 'fixedRate','Period', 15,'StartFcn',@(x,y)set(x,'UserData',y.Data.time),'TimerFcn',@(x,y)disp(datenum(y.Data.time-get(x,'UserData'))*24*60*60))
使用抽动作为定时器StartFcn和然后用toc来引出流逝的时间,所以:
timerObj = timer; %create timer object
timerObj.ExecutionMode = 'fixedSpacing';
timerObj.Period = 15;
timerObj.StartFcn = @(~,~)tic; % start ticking when timer starts
timerObj.TimerFcn = @myTimerFunc;
myTimerFunc是:
function [] = myTimerFunc(timerObj,event)
% use toc
disp(toc);
end
'tic''toc'可能用于此目的! –