Ce face std::this_thread::sleep_for
std::this_thread::sleep_for(500ms) suspendă firul curent cel puțin 500 de milisecunde; poate dura puțin mai mult, în funcție de sistemul de operare. Celelalte fire continuă să ruleze.
Durata se dă cu tipurile din <chrono> (std::chrono::seconds(2)) sau cu literali (2s, 100ms, după using namespace std::chrono_literals;). Varianta sleep_until așteaptă până la un anumit moment.
Parametri
| Parametru | Descriere |
|---|---|
durata |
Cât timp doarme firul. |
Ce returnează
Nimic.
Exemple
Exemplul 1: O numărătoare inversă
Programul durează aproximativ 300 ms; textul afișat este același la fiecare rulare.
#include <chrono>
#include <print>
#include <thread>
int main() {
using namespace std::chrono_literals;
for (int i = 3; i > 0; --i) {
std::println("{}...", i);
std::this_thread::sleep_for(100ms);
}
std::println("Start!");
}
Rezultat
3...
2...
1...
Start!
Exemplul 2: Cât a dormit de fapt
Firul doarme cel puțin cât i s-a cerut; valoarea exactă diferă la fiecare rulare.
#include <chrono>
#include <print>
#include <thread>
int main() {
using namespace std::chrono;
auto inceput = steady_clock::now();
std::this_thread::sleep_for(milliseconds(200));
auto durata = duration_cast<microseconds>(steady_clock::now() - inceput);
std::println("Am cerut 200ms, am dormit {}", durata);
}
Rezultat posibil (diferă la fiecare rulare)
Am cerut 200ms, am dormit 201273µs
Greșeli frecvente
- Folosești
sleep_forca să „aștepți” alt fir (de exemplu dormi 1 secundă și speri că firul a terminat). Este fragil; foloseștejoin,std::futuresaustd::condition_variable. - Scrii
sleep_for(500)cu un număr simplu. Nu compilează: parametrul trebuie să fie o durată (500ms).
Comenzi înrudite
std::chrono::duration: O durată de timp cu unitate de măsură: secunde, milisecunde, minute, ore. Conversiile sunt automate și sigure.std::thread: Pornește o funcție pe un fir de execuție separat, care rulează în paralel cu restul programului.std::condition_variable: Permite unui fir să aștepte, fără să consume procesor, până când alt fir îl anunță că o condiție s-a îndeplinit.