假设我们有一个回调定时器函数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
答案 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 / MatlabControl或MATLAB Engine API for Java从Java回调到Matlab(我实际上甚至不确定该线程是否会被终止这个案例)。即使它确实有效,但这比在你的陈述之间简单地添加一堆toc
检查要复杂得多。