MATLAB で、StopFcn コールバックをコールせずに実行中の timer オブジェクトを削除することはできますか?

19 次查看(过去 30 天)
例えば、以下のようなスクリプト mytest.m を作成します。
delete コマンドで timer オブジェクトを削除すると、そのとき、timer オブジェクトの StopFcnコールバックが内部的に呼び出されるようです。
t = timer("TimerFcn",@tick,"StopFcn",@finish,'ExecutionMode','fixedRate','Period',3);
start(t);
pause(1)
delete(t);
function tick(src,event)
disp("Tick!")
end
function finish(src,event)
disp("Done!")
end
実行結果: StopFcn コールバックが delete メソッドから呼び出されて、"Done!" が表示される
>> mytest
Tick!
Done!
警告: 1 つ以上の実行されているタイマー オブジェクトを削除しています。MATLAB は削除前に自動的にそれらのタイマーを停止しました
 
StopFcn コールバックがコールすることなく、実行中のtimer オブジェクトを削除する方法を教えてください。

采纳的回答

MathWorks Support Team
编辑:MathWorks Support Team 2022-12-22
現時点での回避方法としては、timer オブジェクトの StopFcn コールバック内で、timer オブジェクトが isvalid 関数を用いて有効かどうかを確認する方法が考えられます。
例:
t = timer("TimerFcn",@tick,"StopFcn",@finish,'ExecutionMode','fixedRate',...
'Period',3);
start(t);
pause(1)
delete(t);
function tick(src,event)
disp("Tick!")
end
function finish(src,event)
if ~isvalid(src) % 追加
disp("Done!")
end
end
 実行結果:
>> mytest
Tick!
警告: 1 つ以上の実行されているタイマー オブジェクトを削除しています。MATLAB は削除前に自動的にそれらのタイマーを停止しました
 
なお、上記の警告メッセージを非表示にしたい場合は、delete メソッドを実行する前に、stop(t) で timer オブジェクトを停止するか、下記コマンドを実行します。
>> warning('off', 'MATLAB:timer:deleterunning')
 

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Code Execution 的更多信息

标签

产品


版本

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!