gpt4 book ai didi

matlab - 使用 tic/toc 函数而不是计时器

转载 作者:行者123 更新时间:2023-12-01 14:46:00 29 4
gpt4 key购买 nike

使用 timer对象变得过于复杂,尤其是当您必须使用多个计时器时,因此我试图考虑替代方法。

我想避免使用 pause ,因为它会阻止其他功能的执行。我想用 tic toc测量耗时的函数,但我在下面编写的代码无法按预期工作。

time=tic;
if(abs(toc(time)))==3 %% if 3 second past
my function
end

如何修改此代码以使其在 3 秒后执行命令?

最佳答案

TLDR;

一个 tic/toc一对和一个 while循环实际上与使用 pause 没有什么不同。因为它们都阻止执行任何其他功能。您必须使用 timer对象。

更详细的解释

为了完成这项工作,您需要使用 while循环以监视是否经过了所需的时间。此外,您需要使用 <检查时间是否已经过去,因为不能保证每飞秒都会评估循环条件,因此它永远不会准确。

function wait(time_in_sec)
tic
while toc < time_in_sec
end

% Do thing after 3 seconds
fprintf('Has been %d seconds!\n', time_in_sec)
end
while 的不幸之处循环方法是它可以防止您一次运行多个“计时器”。例如,在以下情况下,它将等待第一个任务 3 秒,然后等待 5 秒第二个任务,总共需要 8 秒。
wait(3)
wait(5)

此外,虽然 while循环正在运行,在 MATLAB 中将无法执行任何其他操作。

更好的方法是设置多个 timer对象并使用回调配置它们,以便它们可以同时运行,并且它们在运行时不会阻塞 MATLAB 中的任何操作。当您需要多个计时器对象(您认为这很痛苦)时,正是您必须使用 timer 的时候。对象。
如果真的那么麻烦,请编写您自己的函数来为您完成所有样板文件
function tmr = wait(time_in_sec)
tmr = timer('StartDelay', time_in_sec, ...
'ExecutionMode', 'SingleShot', ...
'TimerFcn', @(s,e)status(time_in_sec));
tmr.start()

function status(t)
fprintf('Has been %d seconds!\n', t);
end
end

wait(3)
wait(5) % Both will execute after 5 seconds

此外,由于计时器是非阻塞的(当回调未运行时),我可以在启动计时器后立即执行命令
wait(3)
disp('Started 3 second timer')
wait(5)
disp('Started 5 second timer')

如果你用你的while循环试试这个,你会看到 while循环的阻塞行为。

关于matlab - 使用 tic/toc 函数而不是计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640212/

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