【Dart】スリープ、タイマーなどの時間遅延や時間計測APIのまとめ

Flutter

Dart のスリープやタイマー、ストップウォッチなど、時間の遅延や経過、計測に関連する API をまとめました。

スポンサーリンク

時間の値

時間の値は Duration クラスで定義します。(この値を各関数の引数に渡します)

// Duration とそのプロパティ
Duration(
  days: 1, //日
  hours: 2, //時
  minutes: 3, //分
  seconds: 4, //秒
  milliseconds: 5, //ミリ秒
  microseconds: 6 ); //マイクロ秒

// 1時間30分ならこう書きます
Duration(hours: 1, minutes 30);

遅延処理

スリープ

sleep は指定した時間だけ処理を遅延(停止)します。この関数はスレッドをブロックします。

// インポートするライブラリ
import 'dart:io';

// スリープの実行
sleep(Duration(seconds: 3));

非同期の遅延

Future.delayed も指定した時間だけ遅延しますが、スレッドはブロックしません。

// インポートするライブラリ
import 'dart:async';

// 遅延の実行(async/awaitで待機します)
await Future.delayed(Duration(seconds: 3));
// 遅延後に実行したい処理をここに書く

タイマー

Timer クラスは、「単発のタイマー」と「繰り返しのタイマー」が利用できます。また、時間が経過した時に呼び出す関数を指定することができます。

単発のタイマー

// インポートするライブラリ
import 'dart:async';

void _onTimer() {
  print('時間が経過しました!');
}

// 単発のタイマー(呼び出す関数を指定できる)
Timer(Duration(seconds: 3), _onTimer);

// Timerに直接処理を書く場合
Timer(Duration(seconds: 3), () => print('時間が経過しました!'));

繰り返しのタイマー

繰り返しのタイマーでは、呼び出し関数の引数に Timer が入るので、関数の中でタイマーをキャンセルするなどの処理も行えます。(タイマーを保持しておけば外からでも可能です)

// インポートするライブラリ
import 'dart:async';

void _onTimer(Timer timer) {
  print('時間が経過しました!');
}

// 繰り返しのタイマー(呼び出し関数を指定できる)
Timer _timer = Timer.periodic(Duration(seconds: 3), _onTimer);

// Timerに直接処理を書く場合
Timer _timer = Timer.periodic(Duration(seconds: 3), (Timer t) => print('時間が経過しました!'));

// タイマーのキャンセル
_timer.cancel();

ストップウォッチ

Stopwatch クラスは、例えば処理時間を計測したい場合などに使えます。

// インポートするライブラリ
import 'dart:async';

Stopwatch s = Stopwatch();

// 計測を開始
s.start();

// 計測値の観測
print('${s.elapsed}'); // Duration

// 計測が走っているかどうかのフラグ
s.isRunning; // bool

// 計測を停止
s.stop();

// 計測時間をリセット
s.reset();

計測時間は Duration やミリ秒/マイクロ秒などで参照できます。

print('${s.elapsed}'); // Duration
print('${s.elapsedMilliseconds}'); // int
print('${s.elapsedMicroseconds}'); // int

コメント

タイトルとURLをコピーしました