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
コメント