MATLAB で、StopFcn コールバックをコールせずに実行中の timer オブジェクトを削除することはできますか?
21 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
MathWorks Support Team
le 8 Déc 2022
Modifié(e) : MathWorks Support Team
le 22 Déc 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 オブジェクトを削除する方法を教えてください。
Réponse acceptée
MathWorks Support Team
le 22 Déc 2022
Modifié(e) : MathWorks Support Team
le 22 Déc 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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Code Execution dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!