ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

timer クラス

MATLAB コマンドの実行スケジュールを設定するオブジェクトを作成

説明

timer オブジェクトを使用して、MATLAB® コマンドを 1 回以上実行するスケジュールを設定します。複数回実行するようにタイマーのスケジュールを設定した場合、実行間隔とキュー内での競合の処理方法を定義できます。

timer オブジェクトは、コールバック関数を使用して、コマンドを実行します。コールバック関数は、特定のイベントの実行中、コードを実行します。timer オブジェクトの場合、コールバック関数を関数ハンドルまたは文字ベクトルとして指定できます。コールバック関数が文字ベクトルの場合、MATLAB はそれを実行可能なコードとして評価します。timer オブジェクトは、タイマーの開始 (StartFcn)、実行 (TimerFcn)、停止 (StopFcn) またはエラー発生時 (ErrorFcn) のコールバック関数をサポートします。

メモ

timer オブジェクトには、ハードウェア、オペレーティング システム、およびソフトウェアの制限が適用されます。リアルタイム アプリケーションに対する timer オブジェクトの使用は避けてください。

構築

t = timer は、空の timer オブジェクトを作成して、MATLAB コマンドの実行スケジュールを設定します。タイマーが開始した際に TimerFcn が定義されていない場合、エラーが発生します。

t = timer(Name,Value) は、1 つ以上の Name,Value のペアの引数を使用して追加オプションを指定して、timer オブジェクトを作成します。

入力引数

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

引数名 Name は、timer プロパティ名に対応しています。コンストラクターでは、プロパティ値は Name,Value のペア引数を使用して指定されます。

'BusyMode'

TimerFcn の前の実行が完了する前に、タイマーが TimerFcn を実行しなければならない場合に行う操作を示す文字ベクトルまたは string スカラー。Running='on' の場合、BusyMode は読み取り専用です。次の表は、ビジー モードをまとめたものです。

BusyMode の値

キューが空の場合の動作

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

メモ:

'drop'

キューにタスクを追加

タスクを無視

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

'error'

キューにタスクを追加

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

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

'queue'

キューにタスクを追加

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

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

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

既定値: 'drop'

'ErrorFcn'

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

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

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

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

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

'ExecutionMode'

timer オブジェクトがタイマー イベントのスケジュールを設定する方法を指定する文字ベクトルまたは string スカラー。Running='on' の場合、ExecutionMode は読み取り専用です。次の表は、実行モードをまとめたものです。

実行モード

Period 時間の開始点

'singleShot'

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

'fixedRate'

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

'fixedDelay'

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

'fixedSpacing'

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

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

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

既定値: 'singleShot'

'Name'

timer の名前を表す文字ベクトルまたは string スカラー。

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

'ObjectVisibility'

'on' または 'off' の値を取り得る文字ベクトルまたは string スカラー。アプリケーションによって作成された timer オブジェクトにエンド ユーザーが簡単にアクセスできないようにする方法を提供します。関数 timerfind は、ObjectVisibility プロパティが 'off' に設定されているオブジェクトを返しません。オブジェクトは、表示されませんが有効です。表示されないものも含めて、メモリ内にあるすべての timer オブジェクトのリストを抽出するには、関数 timerfindall を使用します。

既定値: 'on'

'Period'

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

既定値: 1.0

'StartDelay'

タイマーの開始から TimerFcn で指定された関数の最初の実行までの遅延を秒単位で指定する 0 以上の数値。Running = 'on' の場合、StartDelay は読み取り専用です。

既定値: 0

'StartFcn'

タイマーの開始時に実行される関数を定義する文字ベクトル、string スカラー、関数ハンドル、または cell 配列。

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

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

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

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

'StopFcn'

タイマーの停止時に実行される関数を定義する文字ベクトル、string スカラー、関数ハンドル、または cell 配列。

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

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

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

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

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

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

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

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

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

'Tag'

オブジェクトのラベルを表す文字ベクトルまたは string スカラー。

'TasksToExecute'

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

既定値: Inf

'TimerFcn'

タイマー コールバック関数を定義する文字ベクトル、string スカラー、関数ハンドル、または cell 配列。タイマーを開始する前に、このプロパティを定義しなければなりません。

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

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

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

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

'UserData'

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

プロパティ

AveragePeriod

タイマー開始後の TimerFcn の平均実行間隔 (秒単位)。タイマーが 2回、タイマー コールバックを実行するまで、値は NaN です。

InstantPeriod

TimerFcn の最新 2 回の実行の間隔 (秒単位)。タイマーが 2回、タイマー コールバックを実行するまで、値は NaN です。

Running

'off' または 'on' として定義される文字ベクトル。タイマーが現在コールバック関数を実行中かどうかを示します。

TasksExecuted

タイマーが開始してから、タイマーが TimerFcn を呼び出した回数。

Type

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

メソッド

deleteメモリから timer オブジェクトを削除
gettimer オブジェクトのプロパティ値のクエリ
isvalidtimer オブジェクトの有効性の判別
settimer オブジェクトに対するプロパティ値の設定
starttimer オブジェクトの開始
startatタイマーを指定時刻に始動するスケジュールの設定
stoptimer オブジェクトの停止
timerfindtimer オブジェクトの検索
timerfindall表示状態に関係なく timer オブジェクトを検索
waitタイマーが実行を停止するまでコマンド プロンプトをブロック

コピーのセマンティクス

ハンドル。コピー操作に対するハンドル クラスの影響については、オブジェクトのコピーを参照してください。

すべて折りたたむ

無名関数をコールバック関数として使用してメッセージを表示します。重要な点は、コールバック関数が渡す最初の 2 つの引数は、timer オブジェクトに対するハンドルとイベント構造体であるということです。これらの引数が関数で使用されない場合でも、関数定義でこれらの引数が必要になります。

3 秒待ってから、「3 seconds have elapsed」というメッセージを表示します。

t = timer;
t.StartDelay = 3;
t.TimerFcn = @(myTimerObj, thisEvent)disp('3 seconds have elapsed');
start(t)
3 seconds have elapsed

関数が timer または event オブジェクトを必要としないと仮定します。チルダ (~) 演算子を使用して、入力を無視します。

t.TimerFcn = @(~,~) disp('3 seconds have elapsed');
start(t)
3 seconds have elapsed

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

delete(t)

タイマーが開始、始動、および停止したときのイベントと日付/時刻出力を表示します。タイマーのコールバック関数は、2 秒の呼び出し間隔で 3 回実行されます。コールバック関数が渡す最初の 2 つの引数は、timer オブジェクトに対するハンドルとイベント構造体です。イベント構造体には 2 つのフィールドが含まれます。Type はコールバックを発生させたイベントのタイプを識別する文字ベクトル、Data はイベント発生時の日付と時刻のベクトルを含む構造体です。

t = timer;
t.StartFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
    datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.TimerFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
     datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.StopFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
    datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.Period = 2;
t.TasksToExecute = 3;
t.ExecutionMode = 'fixedRate';
start(t)
StartFcn executed 14-Mar-2013 09:08:50.865
TimerFcn executed 14-Mar-2013 09:08:50.865
TimerFcn executed 14-Mar-2013 09:08:52.865
TimerFcn executed 14-Mar-2013 09:08:54.866
StopFcn executed 14-Mar-2013 09:08:54.869

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

delete(t)

8 時間の作業時間中、人間工学に基づいて 10 分ごとに 30 秒の休憩を取るように通知する timer オブジェクトを作成します。

timer オブジェクトを返す createErgoTimer.m という名前のファイルに関数を作成します。このファイルに、タイマーの開始、実行および停止の各タスクを処理する 3 つのローカル関数を含めます。

function t = createErgoTimer()
secondsBreak = 30;
secondsBreakInterval = 600;
secondsPerHour = 60^2;
secondsWorkTime = 8*secondsPerHour;

t = timer;
t.UserData = secondsBreak;
t.StartFcn = @ergoTimerStart;
t.TimerFcn = @takeBreak;
t.StopFcn = @ergoTimerCleanup;
t.Period = secondsBreakInterval+secondsBreak;
t.StartDelay = t.Period-secondsBreak;
t.TasksToExecute = ceil(secondsWorkTime/t.Period);
t.ExecutionMode = 'fixedSpacing';
end 

StartDelay を使用すると、直ちに休憩を取るように指示せずに、タイマーを開始できます。TimerFcn 実行後に 10 分と 30 秒 (t.Period) 経過するように、実行モードを 'fixedSpacing' に設定します。これにより、次の 10 分の間隔が開始される前に、30 秒間ストレッチを行うことができます。

createErgoTimer.m ファイルでタイマーの開始に関連付けられたタスクを処理するローカル関数を追加します。既定では、timer オブジェクトは自分自身とイベント データをコールバック関数に渡します。この関数は、イベント データを無視します。

function ergoTimerStart(mTimer,~)
secondsPerMinute = 60;
secondsPerHour = 60*secondsPerMinute;
str1 = 'Starting Ergonomic Break Timer.  ';
str2 = sprintf('For the next %d hours you will be notified',...
    round(mTimer.TasksToExecute*(mTimer.Period + ...
    mTimer.UserData)/secondsPerHour));
str3 = sprintf(' to take a %d second break every %d minutes.',...
    mTimer.UserData, (mTimer.Period - ...
    mTimer.UserData)/secondsPerMinute);
disp([str1 str2 str3])
end

タイマーの実行に関連するタスクを処理するローカル関数を追加します。TimerFcn コールバックにより、30 秒の休憩を取るように通知されます。

function takeBreak(mTimer,~)
disp('Take a 30 second break.')
end

タイマーの停止に関連するタスクを処理するローカル関数を追加します。

function ergoTimerCleanup(mTimer,~)
disp('Stopping Ergonomic Break Timer.')
delete(mTimer)
end

timer オブジェクトを削除すると、メモリから timer オブジェクトが削除されます。

コマンド ラインから関数 createErgoTimer を呼び出して、タイマーを作成および開始します。

t = createErgoTimer;
start(t)
Starting Ergonomic Break Timer.  For the next 8 hours you will be notified to take a 30 second break every 10 minutes.

10 分ごとに、30 秒の休憩を取るように通知されます。

Take a break.

タイマーを 8 時間実行したままにすることも、手動で停止することもできます。StopFcn コールバックに、メモリからタイマーを削除するタスクを含めたことを思い出してください。

stop(t)
Stopping Ergonomic Break Timer.

ヒント

  • イベント キュー内のコールバック関数の実行を強制するためには、コード内に関数 drawnow への呼び出しを含めます。関数 drawnow は、イベント キューをフラッシュします。

R2006a より前に導入