Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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:检测产卵功能是否正在运行(从周期计时器功能内)_Matlab_Timer_Countdowntimer - Fatal编程技术网

Matlab:检测产卵功能是否正在运行(从周期计时器功能内)

Matlab:检测产卵功能是否正在运行(从周期计时器功能内),matlab,timer,countdowntimer,Matlab,Timer,Countdowntimer,我想在MATLAB(2020)中创建一个函数,在控制台中显示倒计时。例如,使用周期计时器,可以轻松实现这一点(见下文),但是在暂停(3.1)期间,当用户按下CTRL+C时,我无法删除计时器(继续执行update\u countdown会导致结果混乱,在控制台中删除字符,而不仅仅显示更新时间) 由于计时器似乎是异步运行的,我的想法是检测计时器生成函数main()是否仍在运行或已被终止-但是我似乎找不到从周期计时器函数update\u countdown中检测这一点的方法。 根据我对数据的了解

我想在MATLAB(2020)中创建一个函数,在控制台中显示倒计时。例如,使用周期计时器,可以轻松实现这一点(见下文),但是在
暂停(3.1)
期间,当用户按下
CTRL+C
时,我无法删除计时器(继续执行
update\u countdown
会导致结果混乱,在控制台中删除字符,而不仅仅显示更新时间)

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

根据我对数据的了解

  • 可以检测为已删除和已删除的句柄
  • CloseRequestFcn()
    -可指定在图形关闭后运行的函数
我怀疑函数中应该存在类似的东西。

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


%另存为脚本并运行
主要的
函数main()
超时=3;
t1=计时器('ExecutionMode','singleShot','StartDelay',timeout','TimerFcn',@finish);
t2=计时器('ExecutionMode','fixedRate','Period',1','TimerFcn',{@update_倒计时,datetime,timeout});
%^datetime是传递当前时间的内置函数
fprintf('倒计时:%1i',超时)
启动(t2);启动(t1);%启动计时器
暂停(3.1);%%您可以为此使用该函数。它注册一个函数,在该函数退出时调用(无论是正常还是通过Ctrl-C)。另请参阅


函数main()
超时=3;
t1=计时器('ExecutionMode','singleShot','StartDelay',timeout','TimerFcn',@finish);
t2=计时器('ExecutionMode','fixedRate','Period',1','TimerFcn',{@update_倒计时,datetime,timeout});
%^datetime是传递当前时间的内置函数
obj=onCleanup(@()delete([t1 t2]);%在函数终止时删除计时器
fprintf('倒计时:%1i',超时)
启动(t2);启动(t1);%启动计时器

暂停(3.1);%谢谢,我没有找到这个函数!尝试执行
stop([t1 t2])
delete([t1 t1]))
,但我无法使用多个函数调用来实现这一点。@user2305193:我认为您不需要在删除计时器之前停止计时器。但是如果确实需要,您可以创建一个单独的调用函数,它不需要是匿名函数。
函数stopanddelete(t).
onCleanup(&)停止和删除([t1,t2]))
%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