有没有办法用Matlab减去/求和Timer函数中的经过时间?

时间:2016-05-16 21:30:50

标签: matlab timer execution termination elapsedtime

假设我们有一个回调定时器函数call_time(obj,event)。我想知道一旦启动计时器功能执行期间的经过时间(delt_time)。 此外,我想用经过的时间来决定该功能是继续执行还是终止(比如delt_time> 60s)。我希望计时器功能同时确定运行时间。通过这种方式,代码一旦达到阈值就知道何时终止程序。实际上,我已经根据我尝试过的不同方式提出了几个类似的问题。但还没有答案。

现在我已经尝试了

     function call_time(obj, event)
         event_time = event.Data.time;
         event_time = event.Data.time - event_time;
         while event_time < 60
             %execute commands
         end
         if event_time > 60
             %terminate execution
         end
     end

但它不起作用。我是如何调用计时器功能的。

     TimerHandle = timer;
     TimerHandle.StartFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
         datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
     TimerHandle.TimerFcn = @call_time;
     TimerHandle.StopFcn = @TimerCleanup;
     TimerHandle.period = 10;
     TimerHandle.ExecutionMode = 'fixedRate';
     start(TimerHandle);

我也试过汤姆建议的方式。但是效果不好。

     function call_time(obj, event)
         event_time = event.Data.time;
         delta_time = event.Data.time - event_time;
         while delta_time < 60
             %execute commands
             delta_time = event.Data.time - event_time;
             fprintf('Elapsed %.2f sec\n', delta_time);
         end
         if delta_time > 60
             %terminate execution
         end
     end

1 个答案:

答案 0 :(得分:0)

假设您想跟踪回调入口后的时间,可以使用tic / toc

function call_time(obj, event)
    elapsed_sec = 0;
    t = tic();
    while elapsed_sec < 60
        % execute commands, e.g. something time-consuming
        A = randn(10000);
        elapsed_sec = toc(t);
        fprintf('Elapsed %.2f sec\n', elapsed_sec);
    end
end
并发上的

UPDATE - Matlab执行是单线程的,所以没有这样的东西是开箱即用的。你可以产生java踏板并让一个终止另一个,但你显然无法在里面运行Matlab代码(至少不容易)。

对于纯Java解决方案,您可以查看this question。如果你真的需要终止Matlab代码,你可以使用上述Java解决方案,并通过JMI / MatlabControlMATLAB Engine API for Java从Java回调到Matlab(我实际上甚至不确定该线程是否会被终止这个案例)。即使它确实有效,但这比在你的陈述之间简单地添加一堆toc检查要复杂得多。