xwrust::xwos::thd

Struct SThdHandle

source
pub struct SThdHandle<'a, const N: XwSz, R>
where [XwStk; N]: Sized, R: Send,
{ /* private fields */ }
Expand description

静态线程的句柄

Implementations§

source§

impl<'a, const N: XwSz, R> SThdHandle<'a, N, R>
where [XwStk; N]: Sized, R: Send,

source

pub fn intr(&self) -> XwEr

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

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

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

pub fn quit(&self) -> XwEr

通知静态线程退出

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

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

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

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

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

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

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

此方法会消费 self

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

static STHD: SThd<1024, &str> = SThd::new("SThd", true);

pub fn xwrust_example_sthd() {
    let mut h = STHD.run(|_| {
        // 线程功能
        "Ok" // 返回值
    });
    let res = h.join();
    match res {
        Ok(r) => {
            // `r` 是线程的返回值。
        },
        Err(e) => {
            h = e;
            // `join()` 失败时的错误码可通过 `e.state()` 获取。
            // `e` 是 `SThdHandle<'a, N, R>` ,重新被返回。
        },
    };
}
source

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

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

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

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

此方法会消费 self

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

static STHD: SThd<1024, &str> = SThd::new("SThd", true);

pub fn xwrust_example_sthd() {
    let mut h = STHD.run(|_| {
        // 线程代码;
        "Ok"
    });
    let res = h.stop();
    match res {
        Ok(r) => {
            // `r` 是线程的返回值。
        },
        Err(e) => {
            h = e;
            // `stop()` 失败时的错误码可通过 `e.state()` 获取。
            // `e` 是 `SThdHandle<'a, N, R>` ,重新被返回。
        },
    };
}
source

pub fn state(&self) -> &ThdJoinState

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

Trait Implementations§

source§

impl<'a, const N: XwSz, R> Drop for SThdHandle<'a, N, R>
where [XwStk; N]: Sized, R: Send,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<'a, const N: XwSz, R> Send for SThdHandle<'a, N, R>
where [XwStk; N]: Sized, R: Send,

source§

impl<'a, const N: XwSz, R> Sync for SThdHandle<'a, N, R>
where [XwStk; N]: Sized, R: Send,

Auto Trait Implementations§

§

impl<'a, const N: usize, R> !Freeze for SThdHandle<'a, N, R>

§

impl<'a, const N: usize, R> !RefUnwindSafe for SThdHandle<'a, N, R>

§

impl<'a, const N: usize, R> Unpin for SThdHandle<'a, N, R>
where [usize; N]: Sized,

§

impl<'a, const N: usize, R> !UnwindSafe for SThdHandle<'a, N, 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.