Matlab:检测是否正在运行生成函数(从周期计时器函数中)



我想在MATLAB(2020(中创建一个函数,在控制台中显示倒计时。使用例如周期性计时器,这可以很容易地实现(见下文(,但是当用户在pause(3.1)期间按下CTRL+C时,我无法删除计时器(并且继续执行update_countdown会导致混乱的结果,删除控制台中的字符而不仅仅显示更新时间(

由于计时器似乎是异步运行的,我的想法是检测计时器生成函数main()是否仍在运行或已被终止,但我似乎找不到从周期性计时器函数update_countdown中检测这一点的方法。

根据我对具有的数字的了解

  • 一个可以检测为已删除的句柄,并且
  • CCD_ 6-一个可以指定在图形关闭后运行的函数

我怀疑函数应该存在这样的东西。

(如何(检测main()当前是否在我的MATLAB进程中运行?(从周期计时器函数update_countdown()中(?


%save as script and run
main
function main()
timeout = 3;
t1 = timer('ExecutionMode', 'singleShot', 'StartDelay', timeout, 'TimerFcn', @finish);
t2 = timer('ExecutionMode', 'fixedRate','Period', 1, 'TimerFcn', {@update_countdown,datetime,timeout}); 
%^datetime is a built-in function that passes the current time
fprintf('countdown: %1i',timeout)
start(t2); start(t1); %start timers
pause(3.1); %<= arbitrary function 
stop([t1 t2]); %stop timers
delete([t1 t2]); %delete timers
disp('Main: do more stuff!')
end

function update_countdown(src,ev,starttime,timeout) 
%delete last displayed time, add new time (remaining)
t=round(seconds(datetime-starttime)); % time running: current time - start time
t=timeout - t;
fprintf('b%i',t); %delete last character and replace it with currently remaining time
end
function finish(src,ev)
disp(' done!');
end

您可以使用函数onCleanup进行此操作。它注册一个函数,以便在函数退出时调用(无论是正常情况下还是通过Ctrl-C(。另请参阅本文档页。


function main()
timeout = 3;
t1 = timer('ExecutionMode', 'singleShot', 'StartDelay', timeout, 'TimerFcn', @finish);
t2 = timer('ExecutionMode', 'fixedRate','Period', 1, 'TimerFcn', {@update_countdown,datetime,timeout}); 
%^datetime is a built-in function that passes the current time
obj = onCleanup(@() delete([t1 t2])); %delete timers when function terminates
fprintf('countdown: %1i',timeout)
start(t2); start(t1); %start timers
pause(3.1); %<= arbitrary function 
stop([t1 t2]); %stop timers
disp('Main: do more stuff!')
end

相关内容

  • 没有找到相关文章

最新更新