如何从MATLAB中的计时器对象中提取经过的时间?

时间:2016-05-26 10:10:30

标签: matlab

有没有办法从MATLAB中的计时器对象中提取每个句点开头的经过时间? 假设我们有一个这样的计时器对象:

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

3 个答案:

答案 0 :(得分: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)

使用userdata的替代解决方案:

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

答案 1 :(得分:0)

使用tictoc'UserData'

的方法

timer - 对象上没有直接的方法来读取自上次调用以来经过的时间。可以使用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'));

建议方法的示例用法

要查看此方法是否有效,我们使用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 :(得分:0)

使用tic作为计时器的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