pub fn spawn<F, R>(f: F) -> Result<DThdHandle<R>, XwEr>where
F: FnOnce(Arc<DThdElement>) -> R + Send + 'static,
R: Send + 'static,
Expand description
新建一个动态线程
- 创建线程成功,返回一个包含
DThdHandle
的Result
; - 创建线程失败,返回一个包含
XwEr
的Result
,XwEr
指示错误的原因。
此方法使用默认的线程工厂创建线程。
当 DThdHandle
被 drop()
时,新建的线程会变成 detached(分离的) 。此时,新建的线程不能再被 join()
。
方法的签名:
'static
约束是因为新建的线程可能比调用者的生命周期更长,因此线程的闭包和返回值的生命周期限定为静态生命周期;Send
约束是因为闭包和返回值需要在线程之间进行转移。并且被移动到Send
约束的闭包的变量也必须是Send
的,否则编译器会报错。 RUSTC是通过Send
约束来区分闭包是不是另一线程的代码的。
§参数说明
- f: 线程的闭包
§示例
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() 失败时的错误码。
},
};