メインコンテンツ

timerfind

timer オブジェクトの検索

説明

out = timerfind表示状態の timer オブジェクトを検索し、配列 out を返します。

out = timerfind(Name,Value) は、プロパティ値が Name,Value の引数として渡された値と一致する表示状態の timer オブジェクトを検索し、配列 out を返します。Value は空の配列にできます。この場合、timerfindName で指定されたプロパティに空の値をもつタイマーを検索します。

out = timerfind(t,Name,Value) は、Name,Value のペアの引数を t にリストされている timer オブジェクトに一致させ (ここで、t は timer オブジェクトの配列)、配列 out を返します。

out = timerfind(S) は、構造体 S で定義されたプロパティ値と一致し、配列 out を返します。S のフィールド名は timer オブジェクトのプロパティ名です。フィールド値は、対応するプロパティ値です。

すべて折りたたむ

複数の個別のタイマーとタイマーの配列を作成します。

t1 = timer('Tag','broadcastProgress','UserData','Monday');
t2 = timer('Tag','displayProgress','UserData','Monday');
timerArr = [timer('Tag','broadcastProgress','UserData','Tuesday');
    timer('Tag','displayProgress','UserData','Tuesday');
    timer('Tag','displayProgress','UserData','Wednesday');];

メモリ内のすべてのタイマーを検索します。

out1 = timerfind
out1 = 
Timer Object Array

   Index:  ExecutionMode:  Period:  TimerFcn:               Name:
   1       fixedSpacing    30       @(~,~)logStack()        timer-1
   2       singleShot      1        ''                      timer-2
   3       singleShot      1        ''                      timer-3
   4       singleShot      1        ''                      timer-4
   5       singleShot      1        ''                      timer-5
   6       singleShot      1        ''                      timer-6

メモリ内に存在し、Tag プロパティの値が 'displayProgress' のタイマーのみを検索します。

out2 = timerfind('Tag','displayProgress')
out2 = 
Timer Object Array

   Index:  ExecutionMode:  Period:  TimerFcn:               Name:
   1       singleShot      1        ''                      timer-3
   2       singleShot      1        ''                      timer-5
   3       singleShot      1        ''                      timer-6

タイマーの検索対象を timerArr 内にある Tag プロパティの値が 'displayProgress' の timer オブジェクトに制限します。

out3 = timerfind(timerArr,'Tag','displayProgress')
out3 = 
Timer Object Array

   Index:  ExecutionMode:  Period:  TimerFcn:               Name:
   1       singleShot      1        ''                      timer-5
   2       singleShot      1        ''                      timer-6

対象となる Tag および UserData プロパティを含む struct を定義します。

searchStruct = struct('Tag','broadcastProgress','UserData','Monday')
searchStruct = struct with fields:
         Tag: 'broadcastProgress'
    UserData: 'Monday'

検索条件として struct を使用して、メモリ内の timer オブジェクトを検索します。

out4 = timerfind(searchStruct)
out4 = 
   Timer Object: timer-2

   Timer Settings
      ExecutionMode: singleShot
             Period: 1
           BusyMode: drop
            Running: off

   Callbacks
           TimerFcn: ''
           ErrorFcn: ''
           StartFcn: ''
            StopFcn: ''

timer オブジェクトを削除します。

delete(t1)
delete(t2)
delete(timerArr)

関数 timerfind を使用して、ワークスペースからタイマー変数が削除されている場合でも、複数のタイマーを同時に停止します。

100 個の乱数を生成し、1,000,000 回実行する timer オブジェクトを 2 つ作成します。「Timer has stopped」というメッセージを表示する StopFcn コールバックを定義します。タイマーを開始し、タイマーが実行中であることを確認します。

t1 = timer('TimerFcn','rand(100,1);',...
    'ExecutionMode','fixedSpacing','TasksToExecute',1e6,...
    'StopFcn','disp(''Timer1 has stopped.'')');
t2 = timer('TimerFcn','rand(100,1);',...
    'ExecutionMode','fixedSpacing','TasksToExecute',1e6,...
    'StopFcn','disp(''Timer2 has stopped.'')');
start([t1 t2])

ワークスペースからタイマー変数をクリアします。

clear

timerfind を使用してタイマーを手動で停止し、タイマーが動作していないことを確認します。

stop(timerfind)
t1.Running
ans = 
'off'
t2.Running
ans = 
'off'

タイマーを削除します。

delete(timerfind)

タイマーの配列を作成して、メモリ内に既存のタイマーが存在することをシミュレートします。カスタム名が付けられたタイマーを作成します。表示状態のすべてのタイマーを一覧表示します。

existingTimers = [timer timer timer];

myTimerName = 'myTimer';
anotherTimer = timer('Name',myTimerName);

timerfind
Timer Object Array

   Index:  ExecutionMode:  Period:  TimerFcn:               Name:
   1       singleShot      1        ''                      timer-1
   2       singleShot      1        ''                      timer-2
   3       singleShot      1        ''                      timer-3
   4       singleShot      1        ''                      myTimer

指定されたタイマーを削除し、表示状態のすべてのタイマーを一覧表示します。

delete(timerfind('Name',myTimerName));
timerfind
Timer Object Array

   Index:  ExecutionMode:  Period:  TimerFcn:               Name:
   1       singleShot      1        ''                      timer-1
   2       singleShot      1        ''                      timer-2
   3       singleShot      1        ''                      timer-3

表示状態のすべてのタイマーをメモリから削除します。

delete(timerfind)

timerfind を使用して、「失われた」timer オブジェクト参照を検索します。ワークスペースから timer オブジェクトをクリアすると参照は失われますが、メモリからは削除されません。

2 つの timer オブジェクトを作成します。コールバック関数は timer または event オブジェクトを必要としないため、チルダ (~) 演算子を使用して、関数ハンドルの入力を無視できます。

t1 = timer('TimerFcn',@(~,~)disp('Timer 1 Fired!'));
t2 = timer('TimerFcn',@(~,~)disp('Timer 2 Fired!'));
whos
  Name      Size            Bytes  Class    Attributes

  t1        1x1               104  timer              
  t2        1x1               104  timer   

ワークスペースから timer オブジェクトを 1 つをクリアします。メモリからタイマーを削除するには、クリアして削除します。

clear t1
whos
  Name      Size            Bytes  Class    Attributes

  t2        1x1               104  timer              

タイマー t1 の削除を試みます。

delete(t1)
Undefined function or variable 't1'.

参照がクリアされているため、削除操作を使用してメモリからタイマー t1 を削除できません。

メモリ内にある有効な timer オブジェクトを検索します。

out = timerfind
Timer Object Array

   Index:  ExecutionMode:  Period:  TimerFcn:               Name:
   1       singleShot      1        1x1 function_handle arraytimer-1
   2       singleShot      1        1x1 function_handle arraytimer-2

2 つのタイマーが見つかったため、ワークスペースにどちらのタイマーが存在しないかを判別します。

out ~= t2
ans =

     1     0

out の最初の timer オブジェクトは t2 と等しくありません。このオブジェクトは以前は t1 でした。これを t1 に再度割り当てます。このオブジェクトはまだ有効なため、タイマーを開始できます。

t1 = out(1);
start(t1)
Timer 1 Fired!

timer オブジェクトを削除します。timerfind を使用して、メモリ内にある timer オブジェクトにアクセスします。オブジェクトはコピーされないため、メモリから out を削除する必要はありません。タイマーが削除されたことを確認するには、timerfind を使用します。

delete(t1)
delete(t2)
timerfind
ans =

     []

4 つの timer オブジェクトを作成します。

t1 = timer('TimerFcn',@(~,~)disp('Timer 1 Fired!'));
t2 = timer('TimerFcn',@(~,~)disp('Timer 2 Fired!'));
t3 = timer('TimerFcn',@(~,~)disp('Timer 3 Fired!'));
t4 = timer('TimerFcn',@(~,~)disp('Timer 4 Fired!'));

ワークスペースから 2 つのタイマーをクリアします。

clear t2 t3

timerfinddelete に渡して、ワークスペース内に存在しているかどうかにかかわらず、メモリからすべての timer オブジェクトを削除します。

delete(timerfind)
timerfind
ans =

     []

入力引数

すべて折りたたむ

検索するタイマー。timer オブジェクトまたは timer オブジェクトの配列として指定します。

例: out = timerfind(t)

タイマー プロパティ名に対応するフィールド名をもつ構造体。フィールド値は、対応するプロパティ値です。

例: out = timerfind(S)

名前と値の引数

すべて展開する

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: out = timerfind('BusyMode','drop')

コールバック関数のプロパティ

すべて展開する

タイマー コールバック関数。文字ベクトル、string スカラー、関数ハンドル、または cell 配列として指定します。タイマーを開始する前に、このプロパティを定義しなければなりません。イベント キュー内のコールバック関数の実行を強制するためには、コード内に関数 drawnow への呼び出しを含めます。関数 drawnow は、イベント キューをフラッシュします。

  • 関数ハンドルを使用してこのプロパティを指定する場合、MATLAB® がコールバックを実行すると、timer オブジェクトとイベント構造体をコールバック関数に渡します。イベント構造体には、Type フィールド内のイベントのタイプと Data フィールド内のイベントの時間が含まれます。

  • 文字ベクトルまたは string スカラーを使用してこのプロパティを指定した場合、MATLAB は、コールバックの実行時にその文字ベクトルに含まれる MATLAB コードを評価します。コールバックを文字ベクトルとして定義することは推奨されていません。関数ハンドルとして指定された関数を使用すると、MATLAB でコールバック関数に重要な情報を渡すことができます。

  • コールバック関数が、timer オブジェクトとイベント データに加えて引数を受け入れる場合、このプロパティを、関数ハンドルと追加引数が含まれる cell 配列として指定します。

詳細については、タイマー コールバック関数を参照してください。

例: t = timer('TimerFcn',"MyTimerFunction(Input);")

タイマー開始コールバック関数。文字ベクトル、string スカラー、関数ハンドル、または cell 配列として指定します。

  • 関数ハンドルを使用してこのプロパティを指定する場合、MATLAB がコールバックを実行すると、timer オブジェクトとイベント構造体をコールバック関数に渡します。イベント構造体には、Type フィールド内のイベントのタイプと Data フィールド内のイベントの時間が含まれます。

  • 文字ベクトルまたは string スカラーを使用してこのプロパティを指定した場合、MATLAB は、コールバックの実行時にその文字ベクトルに含まれる MATLAB コードを評価します。コールバックを文字ベクトルとして定義することは推奨されていません。関数ハンドルとして指定された関数を使用すると、MATLAB でコールバック関数に重要な情報を渡すことができます。

  • コールバック関数が、timer オブジェクトとイベント データに加えて引数を受け入れる場合、このプロパティを、関数ハンドルと追加引数が含まれる cell 配列として指定します。

詳細については、タイマー コールバック関数を参照してください。

例: t = timer('StartFcn',@MyStartFunction(~,~))

タイマー停止コールバック関数。文字ベクトル、string スカラー、関数ハンドル、または cell 配列として指定します。

  • 関数ハンドルを使用してこのプロパティを指定する場合、MATLAB がコールバックを実行すると、timer オブジェクトとイベント構造体をコールバック関数に渡します。イベント構造体には、Type フィールド内のイベントのタイプと Data フィールド内のイベントの時間が含まれます。

  • 文字ベクトルまたは string スカラーを使用してこのプロパティを指定した場合、MATLAB は、コールバックの実行時にその文字ベクトルに含まれる MATLAB コードを評価します。コールバックを文字ベクトルとして定義することは推奨されていません。関数ハンドルとして指定された関数を使用すると、MATLAB でコールバック関数に重要な情報を渡すことができます。

  • コールバック関数が、timer オブジェクトとイベント データに加えて引数を受け入れる場合、このプロパティを、関数ハンドルと追加引数が含まれる cell 配列として指定します。

詳細については、タイマー コールバック関数を参照してください。

タイマーは、以下の状態のときに停止します。

  • タイマーの stop メソッドを呼び出した場合。

  • タイマーが TimerFcn の実行を終了した場合。つまり、TasksExecuted 値が TasksToExecute によって設定された制限に達した場合。

  • エラーが発生します。ErrorFcn コールバックが最初に呼び出され、その後に StopFcn コールバックが呼び出されます。

StopFcn を使用して、メモリからの timer オブジェクトの削除などのクリーンアップ操作を定義できます。

例: t = timer('StopFcn',@MyStopFunction(~,~))

タイマー エラー コールバック関数。文字ベクトル、string スカラー、関数ハンドル、または cell 配列として指定します。エラーが発生すると、この関数が実行され、StopFcn が呼び出されます。

  • 文字ベクトルまたは string スカラーを使用してこのプロパティを指定した場合、MATLAB は、コールバックの実行時にその文字ベクトルに含まれる MATLAB コードを評価します。

  • 関数ハンドルを使用してこのプロパティを指定する場合、MATLAB がコールバックを実行すると、timer オブジェクトとイベント構造体をコールバック関数に渡します。イベント構造体には、Type フィールド内のイベントのタイプと Data フィールド内のイベントの時間が含まれます。

  • コールバック関数が、timer オブジェクトとイベント データに加えて引数を受け入れる場合、このプロパティを、関数ハンドルと追加引数が含まれる cell 配列として指定します。

詳細については、タイマー コールバック関数を参照してください。

例: t = timer('ErrorFcn','disp("An error has occurred")')

タイミング プロパティ

すべて展開する

実行間の遅延。秒単位で 0.001 より大きい数値として指定します。タイマーで Period を使用するには、複数の timer オブジェクトのコールバック イベントのスケジュールを設定するように、ExecutionModeTasksToExecute を設定しなければなりません。

例: t = timer('Period',5)

タイマーの開始と最初の実行との間の遅延。秒単位で 0 以上の数値として指定します。Running = 'on' の場合、StartDelay は読み取り専用です。

例: t = timer('StartDelay',2)

タイマー コールバック関数の実行回数。0 より大きい数値として指定します。TasksToExecute プロパティを使用して、実行回数を設定します。TasksToExecute を使用するには、複数のタイマー コールバック イベントのスケジュールを設定するように、ExecutionMode を設定しなければなりません。

例: t = timer('TasksToExecute',5)

タイマー関数コールバックのキューイング。次の表のいずれかの値として指定します。このプロパティを使用して、TimerFcn の前の実行が完了する前に、タイマーが TimerFcn を実行しなければならない場合に行う操作を指定します。Running プロパティが 'on' に設定されている場合、BusyMode プロパティは読み取り専用です。

BusyMode の値

キューが空の場合の動作

キューが空でない場合の動作

メモ

'drop'

キューにタスクを追加

タスクを無視

場合によって、TimerFcn 呼び出しをスキップ

'error'

キューにタスクを追加

タスクを完了。ErrorFcn で指定されたエラーをスロー。タイマーを停止

実行キュー内のタスクを実行した後、タイマーを停止

'queue'

キューにタスクを追加

キューが空になるまで待機してから、キューにタスクを格納

実行キューのタスクを管理するように、Period プロパティを調整

詳細については、タイマー キューの競合への対処を参照してください。

例: t = timer('BusyMode','error')

タイマー関数コールバックのスケジューリング。次の表のいずれかの値として指定します。Running='on' の場合、ExecutionMode は読み取り専用です。次の表は、実行モードをまとめたものです。

実行モード

Period 時間の開始点

'singleShot'

タイマー コールバック関数は一度だけ実行されます。このため、Period プロパティは効果がありません。このモードは、既定の実行モードです。

'fixedRate'

タイマー コールバック関数を MATLAB 実行キューに追加した直後に開始します。

'fixedDelay'

MATLAB 実行キューの遅延に起因するタイム ラグ後、タイマー関数コールバックの実行が再開された後に開始します。

'fixedSpacing'

タイマー コールバック関数の実行が終了すると開始します。

  • 'singleShot' は、timer クラスに対する単一実行モードで、既定の値です。

    Schematic of timing of 'singleShot' execution mode.

  • 'fixedDelay''fixedRate' および 'fixedSpacing' は、サポートされている 3 つのマルチ実行モードです。これらのモードは、Period プロパティの開始点を定義します。Period プロパティは、実行間の時間間隔 (実行間隔は同じ) を指定します。実行が始まる時点のみ異なります。

    Schematic of timing of 'fixedDelay' execution mode.

例: t = timer('ExecutionMode','fixedDelay')

ラベル付けプロパティ

すべて展開する

タイマーの名前。文字ベクトルまたは string スカラーとして指定します。

既定では 'timer-i' となります。ここで i はこのセッションで作成された i 番目の timer オブジェクトを示す番号です。i を 1 にリセットするには、clear classes コマンドを実行します。

例: t = timer('Name','MyTimer')

オブジェクトのラベル。文字ベクトルまたは string スカラーとして指定します。

例: t = timer('Tag','TimerTag')

オブジェクトの可視性。'on' または 'off' として指定します。アプリケーションによって作成された timer オブジェクトにエンドユーザーがアクセスすることを抑止できます。関数 timerfind は、ObjectVisibility プロパティが 'off' に設定されているオブジェクトを返しません。オブジェクトは、表示されませんが有効です。表示されないものも含めて、メモリ内にあるすべての timer オブジェクトのリストを抽出するには、関数 timerfindall を使用します。

例: t = timer('ObjectVisibility','off')

オブジェクトに追加するデータ用の汎用フィールド。

例: t = timer('UserData',"This is my first timer!")

読み取り専用プロパティ

すべて展開する

実行間の平均時間。数値スカラーとして秒単位で指定します。タイマーが 2回、タイマー コールバックを実行するまで、値は NaN です。

最新 2 回の実行の間隔。数値スカラーとして秒単位で指定します。タイマーが 2回、タイマー コールバックを実行するまで、値は NaN です。

コールバック関数のアクティブな実行を示すインジケーター。'off' または 'on' として指定します。

タイマーが実行された回数。数値スカラーとして指定します。

オブジェクト タイプを識別する文字ベクトル。

出力引数

すべて折りたたむ

検出された timer オブジェクト。timer オブジェクトの配列として返されます。

詳細

すべて折りたたむ

ヒント

  • timerfind表示状態の timer オブジェクトのみを検索します。表示状態の timer オブジェクトはメモリ内に存在し、ObjectVisibility プロパティが 'on' に設定されているオブジェクトです。非表示で有効なオブジェクトを検索するには、timerfindall を使用します。

バージョン履歴

R2006a より前に導入