pub struct DThdHandle<R> { /* private fields */ }
Expand description
动态线程的句柄
Implementations§
source§impl<R> DThdHandle<R>
impl<R> DThdHandle<R>
sourcepub fn element(&self) -> &DThdElement
pub fn element(&self) -> &DThdElement
返回线程的元素
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()
中返回,因为线程已经结束,其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() 失败时的错误码。
},
};
sourcepub fn stop(self) -> Result<R, Self>
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() 失败时的错误码。
},
};
sourcepub fn state<'a>(&'a self) -> &'a ThdJoinState
pub fn state<'a>(&'a self) -> &'a ThdJoinState
返回动态线程的 join()/stop()
状态