Структура 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 для WaitTimeoutResult
  • RefUnwindSafe для WaitTimeoutResult
  • Send для WaitTimeoutResult
  • Sync для WaitTimeoutResult
  • Unpin для WaitTimeoutResult
  • UnwindSafe для WaitTimeoutResult

Blanket-реализации

Стандартные blanket-реализации для всех типов, такие как:

  • Any для T, где T: 'static + ?Sized
  • Borrow<T> для T, где T: ?Sized
  • BorrowMut<T> для T, где T: ?Sized
  • CloneToUninit для T, где T: Clone (экспериментальное API)
  • From<T> для T
  • Into<U> для T, где U: From<T>
  • ToOwned для T, где T: Clone
  • TryFrom<U> для T, где U: Into<T>
  • TryInto<U> для T, где U: TryFrom<T>