Stopwatch în Dart

Un cronometru pentru măsurarea timpului scurs; start() îl pornește, stop() îl oprește, isRunning spune dacă merge.

Sintaxă
Stopwatch()
void start()
void stop()
bool get isRunning

Ce face Stopwatch

Stopwatch măsoară cât timp trece între două momente din program, de exemplu cât durează o funcție. Un cronometru nou este oprit și arată zero. start() îl pornește, stop() îl oprește, iar timpul se citește cu elapsed sau elapsedMilliseconds.

Poți porni și opri cronometrul de mai multe ori: timpul se adună, ca la un cronometru de sport. isRunning spune dacă este pornit. Un apel start() pe un cronometru deja pornit nu face nimic. Pentru a-l aduce la zero folosește reset().

Spre deosebire de diferența a două DateTime.now(), Stopwatch folosește un ceas care nu sare când se schimbă ora sistemului. Timpii măsurați diferă de la o rulare la alta, așa că exemplele de mai jos afișează doar fapte stabile sau au rezultatul scris de mână.

Ce returnează

start, stop: nimic. isRunning: un bool.

Exemple

Exemplul 1: Pornire, oprire și isRunning

sleep din dart:io oprește programul 50 ms, deci cronometrul măsoară sigur cel puțin atât.

import 'dart:io';

void main() {
  var sw = Stopwatch();
  print(sw.isRunning);
  print(sw.elapsedMilliseconds);
  sw.start();
  print(sw.isRunning);
  sleep(Duration(milliseconds: 50));
  sw.stop();
  print(sw.isRunning);
  var dupaStop = sw.elapsedMicroseconds;
  sleep(Duration(milliseconds: 20));
  print(sw.elapsedMicroseconds == dupaStop);
  print(sw.elapsedMilliseconds >= 50);
}

Rezultat

false
0
true
false
true
true

Exemplul 2: Cât durează o funcție

Timpul diferă la fiecare rulare și de la un calculator la altul; mai jos este un exemplu de rezultat.

int fibonacci(int n) => n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);

void main() {
  var sw = Stopwatch()..start();
  var rezultat = fibonacci(32);
  sw.stop();
  print('fibonacci(32) = $rezultat');
  print('Calculat în ${sw.elapsedMilliseconds} ms');
}

Rezultat posibil (diferă la fiecare rulare)

fibonacci(32) = 2178309
Calculat în 51 ms

Greșeli frecvente

  • Creezi cronometrul și uiți să apelezi start(): elapsed rămâne zero. Scrie Stopwatch()..start().
  • Măsori o singură rulare a unui cod foarte rapid. Rezultatul este dominat de „zgomot”; repetă operația de multe ori și împarte timpul.

Comenzi înrudite

  • Stopwatch.elapsed: Timpul măsurat de cronometru: ca Duration (elapsed) sau ca număr de milisecunde (elapsedMilliseconds).
  • Stopwatch.reset: Aduce timpul cronometrului la zero, fără să-l oprească sau să-l pornească.
  • Duration: Un interval de timp (de exemplu 2 ore și 30 de minute), independent de calendar; Duration.zero este durata 0.
  • DateTime.now: Creează un DateTime cu data și ora curente, în fusul orar local al calculatorului.