xwrust::xwos::thd

Function spawn

source
pub fn spawn<F, R>(f: F) -> Result<DThdHandle<R>, XwEr>
where F: FnOnce(Arc<DThdElement>) -> R + Send + 'static, R: Send + 'static,
Expand description

新建一个动态线程

  • 创建线程成功,返回一个包含 DThdHandleResult
  • 创建线程失败,返回一个包含 XwErResultXwEr 指示错误的原因。

此方法使用默认的线程工厂创建线程。

DThdHandledrop() 时,新建的线程会变成 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() 失败时的错误码。
    },
};