Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用tic/toc功能代替计时器_Matlab_Timer_Counter - Fatal编程技术网

Matlab 使用tic/toc功能代替计时器

Matlab 使用tic/toc功能代替计时器,matlab,timer,counter,Matlab,Timer,Counter,使用timer对象变得太复杂了,尤其是当您必须使用多个计时器时,所以我试图考虑其他方法 我希望避免使用暂停,因为它会停止其他函数的执行。我曾想过使用tictoc函数来测量经过的时间,但我在下面编写的代码并没有像我预期的那样工作 time=tic; if(abs(toc(time)))==3 %% if 3 second past my function end 如何修改此代码,使其在3秒后执行命令?您需要一个while循环或一些东西来等待3秒的时间。 像这样的 time=tic; wh

使用
timer
对象变得太复杂了,尤其是当您必须使用多个计时器时,所以我试图考虑其他方法

我希望避免使用
暂停
,因为它会停止其他函数的执行。我曾想过使用
tic
toc
函数来测量经过的时间,但我在下面编写的代码并没有像我预期的那样工作

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

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

您需要一个while循环或一些东西来等待3秒的时间。 像这样的

time=tic;
while 1
    if(abs(toc(time)))==3 %% if 3 second past
        my function
        break;
    end
end
如果要每3秒钟调用
my function
,则应执行以下操作:

time=tic;
while 1
    if mod((abs(toc(time))),3) == 0 %% if 3 second past
        my function
    end
end

请确保完成后,您有某种方式来告诉用户,然后中断while循环。

您可以将其设置为>=而不是==。如果它没有准确的值,它将捕获它。

TLDR;
tic
/
toc
对和
while
循环实际上与使用
pause
没有什么不同,因为它们都会阻止任何其他功能的执行。您必须使用
计时器
对象

更详细的解释
为了实现这一点,您需要使用
while
循环来监控所需的时间是否已过。此外,您还需要使用
请标记语言。我假设Ruby?MATLAB,很抱歉,我总是忘记这不是MATLAB论坛供将来参考,不要把语言放在标题中,它增加了不必要的容量。把它作为一个标签,就像使用“timer”和“counter”一样。你应该真正使用
timer
对象来正确地完成这项工作,特别是当你需要运行多个对象时。
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
wait(3)
wait(5)
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')