Main Content

タイマー コールバック関数

メモ

コールバックが figure の更新などの CPU に負担をかけるタスクを含む場合、コールバック関数の実行が遅れることがあります。

timer オブジェクト イベントに関連するコマンド

timer オブジェクトは、タイマーが始動するとき、起動や停止などの他の timer オブジェクト イベントがあるとき、またはエラーが発生したときに実行する、MATLAB® コマンドを指定するプロパティをサポートします。これらは、"コールバック" と呼ばれます。MATLAB コマンドと timer オブジェクトト イベントを関連付けるには、関連する timer オブジェクト コールバック プロパティの値を設定します。

次の図は、timer オブジェクト実行の間にイベントがいつ起こり、各イベントに関連する timer オブジェクトのプロパティの名前をいつ与えるかを示します。たとえば、MATLAB コマンドを起動のイベントと関連させるには、StartFcn コールバック プロパティに値を割り当てます。エラー コールバックはいつでも起こる可能性があります。

timer オブジェクトのイベントと関連するコールバック関数

コールバック関数の作成

設定した時間が経過すると、選択した 1 つ以上の MATLAB 関数が timer オブジェクトによって実行されます。コールバック プロパティの値として、関数を直接指定できます。コマンドを含む関数ファイルを作成し、その関数をコールバック プロパティの値として指定することもできます。

コールバック関数の直接指定

この例では、5 秒後にグリーティング メッセージを表示する timer オブジェクトを作成します。この例は TimerFcn コールバック プロパティの値を直接指定して、文字ベクトル内にコマンドを配置します。

t = timer('TimerFcn',@(x,y)disp('Hello World!'),'StartDelay',5);

メモ

コールバック コマンドをコールバック関数プロパティの値として直接指定する場合、そのコマンドは MATLAB ワークスペースで評価されます。

コールバック関数内にコマンドを置く

MATLAB コマンドをコールバック プロパティの値として直接指定するのではなく、MATLAB プログラム ファイルにコマンドを含め、コールバック プロパティの値としてそのファイルを指定できます。

コールバック関数を作成する場合、最初の 2 つの引数は、timer オブジェクトに対するハンドルとイベント構造体になります。イベント構造体は 2 つのフィールド TypeData を含みます。Type フィールドは、コールバックの原因となったイベントのタイプを特定する文字ベクトルを含みます。このフィールドの値には、'StartFcn''StopFcn''TimerFcn''ErrorFcn' のいずれかを指定できます。Data フィールドはイベントが起こる時刻を含みます。

これら 2 つの必要な入力引数に加え、コールバック関数は、アプリケーションに固有の引数を受け取ることができます。これらの入力引数を受け取るには、コールバック プロパティの値として関数名を指定するときに cell 配列を使用しなければなりません。詳細については、コールバック関数のプロパティ値の指定を参照してください。

例: コールバック関数の記述

この例では、コールバックをトリガーするイベントのタイプと、コールバックが起こる時間を表示する、単純なコールバック関数を実装します。アプリケーション固有の引数の受け渡しを説明するために、この例のコールバック関数は追加の引数として文字ベクトルを受け取り、このテキストを表示出力に含めます。この関数をコールバック プロパティと共に使用する方法は、コールバック関数のプロパティ値の指定を参照してください。

function my_callback_fcn(obj, event, text_arg)

txt1 = ' event occurred at ';
txt2 = text_arg;

event_type = event.Type;
event_time = datestr(event.Data.time);

msg = [event_type txt1 event_time];
disp(msg)
disp(txt2)

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

適当なコールバック プロパティの値を指定して、コールバック関数を特定のイベントに関連付けます。コールバック関数は、cell 配列または関数ハンドルとして指定できます。コールバック関数が追加の引数を受け取る場合、cell 配列を使用しなければなりません。

次の表では、いくつかのサンプル コールバック関数の構文と、それらを呼び出す方法をまとめます。

コールバック関数の構文

t オブジェクトのプロパティ値として指定する方法

function myfile(obj, event)

t.StartFcn = @myfile

function myfile

t.StartFcn = @(~,~)myfile

function myfile(obj, event, arg1, arg2)

t.StartFcn = {@myfile, 5, 6}

この例では、timer オブジェクト コールバック関数のプロパティ値を、引数で、あるいは引数なしで指定するいくつかの方法を示します。コールバック関数 my_callback_fcn のコードを見るには、例: コールバック関数の記述を参照してください。

  1. timer オブジェクトを作成します。

    t = timer('StartDelay', 4, 'Period', 4, 'TasksToExecute', 2, ...
              'ExecutionMode', 'fixedRate');
  2. StartFcn コールバックの値を指定します。この例では、コールバック関数が渡される引数にアクセスする必要があるため、値は cell 配列で指定されていることに注意してください。

    t.StartFcn = {@my_callback_fcn, 'My start message'};
  3. StopFcn コールバックの値を指定します。ここでも、コールバック関数が渡される引数にアクセスする必要があるので、値は cell 配列で指定されています。

    t.StopFcn = { @my_callback_fcn, 'My stop message'};
  4. TimerFcn コールバックの値を指定します。この例では、MATLAB コマンドを文字ベクトル内に指定します。

    t.TimerFcn = @(x,y)disp('Hello World!');
  5. 次のコマンドで、timer オブジェクトを起動します。

    start(t)
    

    この例では、次の内容が出力されます。

    StartFcn event occurred at 10-Mar-2004 17:16:59
    My start message
    Hello World!
    Hello World!
    StopFcn event occurred at 10-Mar-2004 17:16:59
    My stop message
  6. timer オブジェクトの使用を終了後、timer オブジェクトを削除します。

    delete(t)

参考

関連するトピック