【问题标题】:Print out a warning every whole second in Matlab在 Matlab 中每秒打印一个警告
【发布时间】:2017-08-23 08:16:43
【问题描述】:

我试图在每秒后打印一条警告或一条消息,例如“1 秒已过”。 有没有可能意识到这一点?

我用 tic toc 和一个循环试过了,但是还不够。此外,我从来没有准确地得到一秒钟。是否有自动打印每 X 毫秒的命令? 有什么想法吗?

提前致谢。

【问题讨论】:

    标签: matlab timer setinterval


    【解决方案1】:

    使用timer 对象。

    t = timer;
    t.ExecutionMode = 'fixedRate';
    t.Period = 1;
    t.TimerFcn = @(~,~)disp('1s elapsed');
    start(t)
    

    【讨论】:

      【解决方案2】:

      作为@Daniel suggested,计时器对象是要走的路。

      要记住的一点是,MATLAB 计时器异步执行,但它们是 not truly parallel(即使 timer objects run in a different thread,MATLAB 解释器仍然是 single-threaded)。

      因此计时器事件可能不会触发(BusyMode 属性默认为 drop),因为它们发生在某些冗长的不可中断操作(如内置函数、MEX 函数等)期间。

      这是一个例子:

      >> t = timer('ExecutionMode','fixedRate', 'Period',1, 'BusyMode','drop', ...
          'TimerFcn',@(~,~)disp(datestr(now,'MM:SS')));
      >> start(t)
      35:21
      35:22
      35:23
      >> eig(rand(2000));    % <-- takes a couple of seconds to finish
      35:27
      35:28
      35:29
      35:30
      >> stop(t)
      

      请注意,当EIG 函数正在运行时,计时器事件没有机会执行。

      现在如果我们将BusyMode property 更改为queue,那么在EIG 操作执行期间事件将再次不会触发,但一旦EIG 完成,将立即吐出所有排队的事件:

      >> t.BusyMode = 'queue';
      >> start(t)
      37:39
      37:40
      >> eig(rand(2000));
      37:45
      37:45
      37:45
      37:45
      37:45
      37:46
      37:47
      >> stop(t)
      >> delete(t)
      

      【讨论】:

      【解决方案3】:

      它被称为pause。可选参数以秒为单位指定持续时间。文档:http://www.mathworks.de/de/help/matlab/ref/pause.html

      【讨论】:

      • 谢谢,但我不想暂停我的代码。我只想在代码运行时每秒打印出一些东西。
      • 好的,那我误解了你的问题。你可能想澄清一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2017-12-27
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多