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

21 visualizzazioni (ultimi 30 giorni)
例えば、以下のようなスクリプト 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 オブジェクトを削除する方法を教えてください。

Risposta accettata

MathWorks Support Team
MathWorks Support Team il 22 Dic 2022
Modificato: MathWorks Support Team il 22 Dic 2022
現時点での回避方法としては、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')
 

Più risposte (0)

Categorie

Scopri di più su Code Execution in Help Center e File Exchange

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!