Функция this_thread::sleep_for
Функция this_thread::sleep_for приостанавливает
выполнение текущего потока на указанный временной
интервал. Она принимает один параметр - длительность
задержки, которая может быть задана с помощью
различных единиц измерения времени, таких как
наносекунды, микросекунды, миллисекунды, секунды,
минуты или часы. Функция объявлена в заголовочном
файле <thread> и находится в
пространстве имен std::this_thread.
Во время выполнения функции поток не потребляет процессорное время, что позволяет другим потокам и процессам выполняться. Однако следует учитывать, что фактическое время сна может быть больше запрошенного из-за планировщика операционной системы.
Синтаксис
this_thread::sleep_for(duration);
Пример
Давайте приостановим выполнение программы на
2 секунды и выведем сообщение до и после
задержки:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
cout << "Start" << endl;
this_thread::sleep_for(chrono::seconds(2));
cout << "End" << endl;
return 0;
}
Результат выполнения кода:
"Start"
"End"
Сообщение "End" появится на экране только
через 2 секунды после вывода "Start".
Пример
Давайте используем миллисекунды для более точной
задержки. Приостановим поток на 500
миллисекунд:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
cout << "Waiting..." << endl;
this_thread::sleep_for(chrono::milliseconds(500));
cout << "Done" << endl;
return 0;
}
Результат выполнения кода:
"Waiting..."
"Done"
Пример
Давайте создадим два потока, один из которых будет выполняться с задержкой, чтобы продемонстрировать параллельную работу:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
void worker()
{
for (int i = 0; i < 3; i++)
{
this_thread::sleep_for(chrono::seconds(1));
cout << "Worker: " << i << endl;
}
}
int main()
{
thread t(worker);
cout << "Main thread continues" << endl;
t.join();
return 0;
}
Результат выполнения кода (примерный):
"Main thread continues"
"Worker: 0"
"Worker: 1"
"Worker: 2"
Смотрите также
-
класс
thread,
который представляет отдельный поток выполнения -
функция
sleep_until,
которая приостанавливает поток до указанного момента времени -
функция
yield,
которая передает управление другим потокам -
метод
join,
который ожидает завершения потока