2016-05-26 56 views
0

有没有什么办法从MATLAB中的计时器对象的每个周期开始提取经过的时间? 说我们有一个计时器对象是这样的:如何从MATLAB中的计时器对象中提取已用时间?

t=timer('ExecutionMode', 'fixedRate', ... 
    'Period', 15, ...     
    'TimerFcn',@(x,y)disp('Hello World!')) 
+0

'tic''toc'可能用于此目的! –

回答

0

使用tictoc'UserData'

没有直接的方法对timer -object读取自最后一次通话所经过的时间方法。有可能使用tictoc的构造来实现你想要的。

通用字段'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 
2

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)) 
0

使用抽动作为定时器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 
相关问题