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

조회 수: 20 (최근 30일)
MathWorks Support Team
MathWorks Support Team 2022년 12월 8일
편집: MathWorks Support Team 2022년 12월 22일
例えば、以下のようなスクリプト 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일
편집: 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!