gpt4 book ai didi

multithreading - 如何从函数返回 JoinHandle?

转载 作者:行者123 更新时间:2023-11-29 07:52:37 27 4
gpt4 key购买 nike

处理这种情况的最佳方法是什么:

use std::thread;

struct Prefe;

fn main() {
let prefe = Prefe;

start(&prefe).join();
}

fn start(pre: &Prefe) -> thread::JoinHandle {
thread::spawn(move || {
println!("Test spawn");
})
}

我得到错误:

error[E0243]: wrong number of type arguments: expected 1, found 0
--> src/main.rs:11:26
|
11 | fn start(pre: &Prefe) -> thread::JoinHandle {
| ^^^^^^^^^^^^^^^^^^ expected 1 type argument

我想我可以用这样的东西,但我不知道用什么来T:

fn start<T>(pre: &Prefe, t: T) -> thread::JoinHandle<T> {
thread::spawn(move || {
println!("Test spawn");
})
}

我看到 thread::spawn 使用它来返回,但我不知道这是否可以帮助我或如何使用它:

Builder::new().spawn(f).unwrap()

这似乎可行,但我不知道这是对还是错:

fn start(pre: &Prefe) -> thread::JoinHandle<()> {
thread::spawn(move || {
println!("Test spawn");
})
}

最佳答案

查看 thread::spawn 的函数签名:

pub fn spawn<F, T>(f: F) -> JoinHandle<T>
where
F: FnOnce() -> T,
F: Send + 'static,
T: Send + 'static,

这表示 spawn 采用通用类型 F。此类型必须实现特征 FnOnce .该实现不接受任何参数,并返回类型为 T 的参数。 spawn 返回一个 JoinHandle,它使用 相同 类型 T 进行参数化。

要使用此信息,您需要知道闭包返回的类型。一旦你知道了,这就是你的 JoinHandle 应该被参数化的类型。

您的示例闭包调用 println!,它的返回类型为 (),所以这就是 this JoinHandle 将使用。

关于multithreading - 如何从函数返回 JoinHandle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43838125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com