MATLAB で、StopFcn コールバックをコールせずに実行中の timer オブジェクトを削除することはできますか?
21 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
MathWorks Support Team
am 8 Dez. 2022
Bearbeitet: MathWorks Support Team
am 22 Dez. 2022
例えば、以下のようなスクリプト 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 オブジェクトを削除する方法を教えてください。
Akzeptierte Antwort
MathWorks Support Team
am 22 Dez. 2022
Bearbeitet: MathWorks Support Team
am 22 Dez. 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')
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Code Execution finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!