gpt4 book ai didi

matlab - 将 Matlab 计时器对象重置为时间 0

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:37 27 4
gpt4 key购买 nike

我使用 Matlab 计时器对象以固定间隔(每 1800 秒)轮换一些日志文件:

rotateTimer = timer( ...
'Name', 'Log Rotator', ...
'Period', 1800, ...
'StartDelay', 1800, ...
'ExecutionMode', 'fixedSpacing', ...
'TimerFcn', {@RotateLogs});
start(rotateTimer);

这种方法对于自动轮转非常有效,但我需要允许用户手动轮转日志文件。

当发生手动旋转时,我希望下一次自动旋转发生在 1800 秒后;这需要我“重置”计时器对象以在手动旋转时从 0 开始计数。

我没有看到我可以调用的属性或方法来将计时器清零。启动和停止计时器不会重置它,它只是从原来的地方继续计数。我怎样才能做到这一点?

最佳答案

另一种不需要重新创建计时器对象的方法:

per = 2;
t = timer('Period' , per, ...
'StartDelay' , per, ...
'ExecutionMode', 'fixedSpacing',...
'TimerFcn' , 'disp(toc);tic;',...
'StopFcn' , {@mystop,per},...
'StartFcn' , 'tic;');

% Suppress warning from millisecond precision of StartDelay
warning('off','MATLAB:TIMER:STARTDELAYPRECISION')

start(t)
stop(t)
delete(t)

mystop()

function mystop(obj,event,in)
t = toc;
set(obj,'StartDelay',in-t);
disp(t) % Not necessary, just to check
tic % Not necessary, just to check
end

这里的想法是,您可以在每次停止后重置 StartDelay,为此您需要计算每次计时器执行之间耗时。这意味着您必须在每次执行时重置。

备注:

  • StartFcn() 的重置是为了防止之前调用的 tic(如果适用)产生负的 StartDelay
  • TimerFcn 中的disp(toc) 不是必需的,只是为了检查计时是否正确。
  • 相同的检查目的服务于 mystop() 中的两个注释行。

关于matlab - 将 Matlab 计时器对象重置为时间 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com