matlab のタイマーは、別のスレッドを生成して待機することができ、現在の matlab インスタンスの外から見る必要があるという問題を回避できます。タイマーを設定して、デバッグ モードがアクティブかどうか、および何かを実行するかどうかを確認できます。
デバッグモードがアクティブかどうかを確認し、アクティブな場合は何かを行う関数の例:
function mycallbackfunction(~,~)
if feature('IsDebugMode') % undocumented thanks to CatzLoveJazz
load handel
sound(y,Fs)
前の 2 行は注目を集める例です。その他の可能性として、 を使用beep
したり、ファイルに書き込んだり、任意のコマンドや関数を実行したりできます。
evalin('base','stop(timerHandle)') % stop the timer
end
end
この関数を変更して、「アテンション グラブ」を 1 回評価し、デバッグ モードがアクティブでなくなったらリセットすることができます。現在、タイマーを停止してから手動で再起動することに依存しています。
(注: 以前のバージョンには else がありましたが、ワークスペースがビジー状態の間は実行されないため、これは冗長でした)
次に、タイマー オブジェクトを作成します。
timerTic=4; % how often the timer checks
timerHandle = timer();
timerHandle.startDelay = timerTic;
timerHandle.Period = timerTic;
timerHandle.ExecutionMode = 'fixedRate';
timerHandle.TasksToExecute = inf;
timerHandle.TimerFcn = @mycallbackfunction;
タイマー呼び出しを開始する
start(timerHandle)
注意を引くラインを実行した後、タイマーは自動的に停止します。デバッグ モードに入らない場合、タイマーは動作し続けるため、手動で停止する必要があります。stop(timerHandle)
変数delete(timerHandle)
をクリアする前に、終了したら実行してオブジェクトを削除することを忘れないでくださいtimerHandle