Ce face sleep
sleep(const Duration(seconds: 2)) din dart:io blochează isolate-ul curent pentru durata dată. În acest timp nu rulează nici timere, nici Future-uri, nici cereri HTTP: totul așteaptă până se termină pauza.
Este potrivit pentru scripturi simple de consolă (o pauză între încercări, o animație de text). În cod asincron, pe server sau în Flutter folosește await Future.delayed(durata), care așteaptă fără să blocheze restul programului.
Parametri
| Parametru | Descriere |
|---|---|
duration |
Cât timp stă programul pe loc; un Duration. |
Exemple
Exemplul 1: Pauză măsurată cu Stopwatch
import 'dart:io';
void main() {
final cronometru = Stopwatch()..start();
sleep(const Duration(milliseconds: 250));
cronometru.stop();
print('Au trecut cel puțin 250 ms: ${cronometru.elapsedMilliseconds >= 250}');
}
Rezultat
Au trecut cel puțin 250 ms: true
Exemplul 2: Reîncercări cu pauză între ele
import 'dart:io';
var incercari = 0;
bool conecteaza() {
incercari++;
return incercari == 3;
}
void main() {
for (var i = 1; i <= 5; i++) {
if (conecteaza()) {
print('Conectat la încercarea $i.');
return;
}
print('Încercarea $i a eșuat, aștept...');
sleep(const Duration(milliseconds: 100));
}
print('Nu m-am putut conecta.');
}
Rezultat
Încercarea 1 a eșuat, aștept...
Încercarea 2 a eșuat, aștept...
Conectat la încercarea 3.
Exemplul 3: sleep blochează și timerele
Timerul de 10 ms ar trebui să ruleze în timpul pauzei, dar sleep oprește tot isolate-ul, așa că apare abia după.
import 'dart:async';
import 'dart:io';
void main() {
Timer(const Duration(milliseconds: 10), () => print('timer (10 ms)'));
print('încep pauza de 200 ms');
sleep(const Duration(milliseconds: 200));
print('pauza s-a terminat');
}
Rezultat
încep pauza de 200 ms
pauza s-a terminat
timer (10 ms)
Greșeli frecvente
- Folosești
sleepîntr-un server HTTP: cât doarme, serverul nu răspunde la nicio cerere. Foloseșteawait Future.delayed(...). - Scrii
sleep(2): funcția primește unDuration, nu un număr de secunde.
Comenzi înrudite
exit: Oprește imediat programul cu codul de ieșire dat: 0 pentru succes, altă valoare pentru eroare.Process.kill: kill trimite un semnal de oprire unui proces pornit cu Process.start; pid este numărul procesului dat de sistem.HttpServer: HttpServer.bind pornește un server web pe o adresă și un port; serverul este un flux de cereri (HttpRequest).