Метод is_finished
Метод is_finished проверяет, завершился ли поток,
связанный с объектом JoinHandle. Он возвращает
true, если поток уже завершил своё выполнение,
и false в противном случае. Метод не принимает
параметров и не блокирует текущий поток - он лишь
возвращает текущее состояние.
Синтаксис
join_handle.is_finished()
Пример
Давайте создадим поток, который спит некоторое время, и проверим, завершился ли он сразу после запуска:
use std::thread;
use std::time::Duration;
fn main()
{
let handle = thread::spawn(|| {
thread::sleep(Duration::from_millis(100));
});
let res = handle.is_finished();
println!("{}", res);
handle.join().unwrap();
}
Результат выполнения кода:
false
Пример
Давайте создадим поток, который выполняется мгновенно,
и подождём его завершения через join, а затем
проверим состояние:
use std::thread;
fn main()
{
let handle = thread::spawn(|| {
let x = 1 + 1;
println!("{}", x);
});
handle.join().unwrap();
let res = handle.is_finished();
println!("{}", res);
}
Результат выполнения кода:
2
true
Пример
Давайте проверим состояние потока в цикле, пока он не завершится:
use std::thread;
use std::time::Duration;
fn main()
{
let handle = thread::spawn(|| {
thread::sleep(Duration::from_millis(50));
println!("Поток завершён");
});
while !handle.is_finished() {
println!("Поток ещё работает");
thread::sleep(Duration::from_millis(20));
}
handle.join().unwrap();
println!("{}", handle.is_finished());
}
Результат выполнения кода:
Поток ещё работает
Поток ещё работает
Поток ещё работает
Поток завершён
true
Смотрите также
-
класс
JoinHandle,
который представляет дескриптор потока -
метод
join,
который блокирует текущий поток до завершения целевого -
функция
spawn,
которая создаёт новый поток и возвращает JoinHandle -
функция
sleep,
которая приостанавливает выполнение текущего потока