Структура WaitTimeoutResult
Тип, указывающий, вернулась ли ожидание с таймаутом на переменной условия из-за истечения времени или нет.
Возвращается методом wait_timeout.
Декларация
#![allow(unused)] fn main() { pub struct WaitTimeoutResult(/* private fields */); }
Методы
timed_out (стабильно с версии 1.5.0)
#![allow(unused)] fn main() { pub fn timed_out(&self) -> bool }
Возвращает true, если известно, что ожидание завершилось по таймауту.
Примеры:
Этот пример порождает поток, который будет спать 20 миллисекунд перед обновлением логического значения и последующим уведомлением переменной условия.
Основной поток будет ждать с таймаутом 10 миллисекунд на переменной условия и выйдет из цикла по истечении таймаута.
#![allow(unused)] fn main() { use std::sync::{Arc, Condvar, Mutex}; use std::thread; use std::time::Duration; let pair = Arc::new((Mutex::new(false), Condvar::new())); let pair2 = Arc::clone(&pair); thread::spawn(move || { let (lock, cvar) = &*pair2; // Подождём 20 миллисекунд перед уведомлением переменной условия. thread::sleep(Duration::from_millis(20)); let mut started = lock.lock().unwrap(); // Обновляем логическое значение. *started = true; cvar.notify_one(); }); // Ждём запуска потока. let (lock, cvar) = &*pair; loop { // Установим таймаут на ожидание переменной условия. let result = cvar.wait_timeout(lock.lock().unwrap(), Duration::from_millis(10)).unwrap(); // Прошло 10 миллисекунд. if result.1.timed_out() { // Таймаут истёк, теперь можем выйти. break } } }
Реализации трейтов
Clone (стабильно с версии 1.5.0)
Реализован для WaitTimeoutResult.
- Метод:
clone(&self) -> WaitTimeoutResult- возвращает дубликат значения. - Метод:
clone_from(&mut self, source: &Self)- выполняет присваивание копированием изsource.
Debug (стабильно с версии 1.5.0)
Реализован для WaitTimeoutResult.
- Метод:
fmt(&self, f: &mut Formatter<'_>) -> Result- форматирует значение с помощью данного форматтера.
PartialEq (стабильно с версии 1.5.0)
Реализован для WaitTimeoutResult.
- Метод:
eq(&self, other: &WaitTimeoutResult) -> bool- проверяет равенство значенийselfиother, используется оператором==. - Метод:
ne(&self, other: &Rhs) -> bool- проверяет неравенство!=. Реализация по умолчанию почти всегда достаточна и не должна переопределяться без очень веской причины.
Copy (стабильно с версии 1.5.0)
Реализован для WaitTimeoutResult.
Eq (стабильно с версии 1.5.0)
Реализован для WaitTimeoutResult.
StructuralPartialEq (стабильно с версии 1.5.0)
Реализован для WaitTimeoutResult.
Автоматические реализации трейтов
FreezeдляWaitTimeoutResultRefUnwindSafeдляWaitTimeoutResultSendдляWaitTimeoutResultSyncдляWaitTimeoutResultUnpinдляWaitTimeoutResultUnwindSafeдляWaitTimeoutResult
Blanket-реализации
Стандартные blanket-реализации для всех типов, такие как:
AnyдляT, гдеT: 'static + ?SizedBorrow<T>дляT, гдеT: ?SizedBorrowMut<T>дляT, гдеT: ?SizedCloneToUninitдляT, гдеT: Clone(экспериментальное API)From<T>дляTInto<U>дляT, гдеU: From<T>ToOwnedдляT, гдеT: CloneTryFrom<U>дляT, гдеU: Into<T>TryInto<U>дляT, гдеU: TryFrom<T>