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,
impl<'a, const N: XwSz, R> SThdHandle<'a, N, R>where
[XwStk; N]: Sized,
R: Send,
sourcepub fn quit(&self) -> XwEr
pub fn quit(&self) -> XwEr
通知静态线程退出
此方法用于向线程设置 退出状态 。
调用此方法的线程不会等待被设置 退出状态 的线程退出。
此方法可被重复调用,线程的 退出状态 一旦被设置,不可被清除。
§上下文
- 线程、中断、中断底半部、空闲任务
sourcepub fn join(self) -> Result<R, Self>
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>` ,重新被返回。
},
};
}
sourcepub fn stop(self) -> Result<R, Self>
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>` ,重新被返回。
},
};
}
sourcepub fn state(&self) -> &ThdJoinState
pub fn state(&self) -> &ThdJoinState
返回线程的 join()/stop()
状态