xwrust::xwos::thd

Struct DThdHandle

source
pub struct DThdHandle<R> { /* private fields */ }
Expand description

动态线程的句柄

Implementations§

source§

impl<R> DThdHandle<R>

source

pub fn thdd(&self) -> &ThdD

返回XWOS的线程对象描述符

线程对象描述符用于与C语言交互。

source

pub fn element(&self) -> &DThdElement

返回线程的元素

source

pub fn intr(&self) -> XwEr

中断线程的阻塞态和睡眠态

此方法用于中断线程的 阻塞态睡眠态

§上下文
  • 线程、中断、中断底半部、空闲任务
source

pub fn quit(&self) -> XwEr

通知动态线程退出

此方法用于向线程设置 退出状态

调用此方法的线程不会等待被设置 退出状态 的线程退出。

此方法可被重复调用,线程的 退出状态 一旦被设置,不可被清除。

§上下文
  • 线程、中断、中断底半部、空闲任务
source

pub fn join(self) -> Result<R, Self>

等待动态线程运行至退出,并返回线程的返回值

  • 如果动态子线程还在运行,此方法会阻塞父线程直到动态子线程退出。父线程的阻塞状态可被中断;
  • 如果动态子线程已经提前运行至退出,此方法可立即返回动态子线程的返回值。

此方法会消费 self

  • 如果此方法执行成功,会消费掉 self ,并将动态子线程的返回值放在 Ok() 中返回,因为线程已经结束,其 DThdHandle 的生命周期也应该结束;
  • 如果此方法执行失败,会重新在 Err() 中返回 self ,并可通过 DThdHandle::state() 方法获取失败的原因。
§上下文
  • 线程
§示例
use xwrust::xwos::thd;

match thd::spawn(|_| {
    // 线程代码;
    // 返回值
}) {
    Ok(handler) => {
        match handler.join() {
            Ok(r) => {
                // r 是线程闭包的返回值。
            },
            Err(e) => {
                // `join()` 失败时的错误码可通过 `e.state()` 获取。
                // `e` 是 `DThdHandle<R>` ,重新被返回。
            },
        };
    },
    Err(rc) => {
        // rc 是 spawn() 失败时的错误码。
    },
};
source

pub fn stop(self) -> Result<R, Self>

终止动态线程并等待线程运行至退出,并返回线程的返回值

  • 如果动态子线程还在运行,此方法会阻塞父线程直到动态子线程退出。父线程的阻塞状态可被中断;
  • 如果动态子线程已经提前运行至退出,此方法可立即返回动态子线程的返回值。

此方法 = DThdHandle::quit() + DThdHandle::join()

此方法会消费 self

  • 如果此方法执行成功,会消费掉 self ,并将动态子线程的返回值放在 Ok() 中返回,因为线程已经结束,其 DThdHandle 的生命周期也应该结束;
  • 如果此方法执行失败,会重新在 Err() 中返回 self ,并可通过 DThdHandle::state() 方法获取失败的原因。
§上下文
  • 线程
§示例
use xwrust::xwos::thd;

match thd::spawn(|_| {
    // 线程代码;
    // 返回值
}) {
    Ok(handler) => {
        match handler.stop() {
            Ok(r) => {
                // r 是线程闭包的返回值。
            },
            Err(e) => {
                // `stop()` 失败时的错误码可通过 `e.state()` 获取。
                // `e` 是 `DThdHandle<R>` ,重新被返回。
            },
        };
    },
    Err(rc) => {
        // rc 是 spawn() 失败时的错误码。
    },
};
source

pub fn state<'a>(&'a self) -> &'a ThdJoinState

返回动态线程的 join()/stop() 状态

source

pub fn finished(&self) -> bool

检查关联的动态线程是否运行结束

此方法不会阻塞调用者。

Trait Implementations§

source§

impl<R> Debug for DThdHandle<R>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<R> Send for DThdHandle<R>

source§

impl<R> Sync for DThdHandle<R>

Auto Trait Implementations§

§

impl<R> Freeze for DThdHandle<R>

§

impl<R> !RefUnwindSafe for DThdHandle<R>

§

impl<R> Unpin for DThdHandle<R>

§

impl<R> !UnwindSafe for DThdHandle<R>

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.