Функция sleep
Функция sleep приостанавливает выполнение
текущего потока на заданный интервал времени.
Параметром функция принимает значение типа
Duration, которое определяет, на сколько
именно нужно усыпить текущий поток. Во время
сна поток не потребляет ресурсы процессора,
но при этом продолжает удерживать блокировки,
если они были захвачены.
Функция является блокирующей: выполнение кода
после вызова sleep возобновится только
по истечении указанного времени. Точность сна
зависит от операционной системы, поэтому
фактическая пауза может быть немного больше
заданной.
Синтаксис
std::thread::sleep(dur)
Функция доступна по пути std::thread::sleep,
а также может быть импортирована напрямую:
use std::thread::sleep;. Параметр
dur имеет тип Duration.
Пример
Давайте приостановим главный поток на одну секунду и выведем сообщение до и после сна:
use std::thread;
use std::time::Duration;
fn main()
{
println!("before sleep");
thread::sleep(Duration::from_secs(1));
println!("after sleep");
}
Результат выполнения кода:
"before sleep"
"after sleep"
Сообщение "after sleep" появится на
экран только спустя одну секунду.
Пример
Давайте усыпим поток на 500 миллисекунд,
используя Duration::from_millis:
use std::thread;
use std::time::Duration;
fn main()
{
println!("start");
thread::sleep(Duration::from_millis(500));
println!("end");
}
Результат выполнения кода:
"start"
"end"
Пример
Давайте запустим дочерний поток, который будет периодически выводить числа с паузой в одну секунду:
use std::thread;
use std::time::Duration;
fn main()
{
let handle = thread::spawn(|| {
for i in 1..=3 {
println!("tick {}", i);
thread::sleep(Duration::from_secs(1));
}
});
handle.join().unwrap();
println!("done");
}
Результат выполнения кода:
"tick 1"
"tick 2"
"tick 3"
"done"
Смотрите также
-
функция
spawn,
которая запускает новый поток выполнения -
структура
JoinHandle,
которая представляет дескриптор дочернего потока -
метод
join,
который ожидает завершения дочернего потока -
функция
park,
которая блокирует текущий поток до его пробуждения