如何在rust中传递参数给线程?



我有一个闭包,我不能改变,我需要在一个新的线程中运行,我需要传递一个变量。这就是我想象中的代码:

use std::thread;
fn main() {
// I can not influence this closure, but this is what it looks like
let handle = move |data: i32| {
println!("Got {data}")
};
let foo = 123;
// This doesn't work
thread::spawn(handle).arg(foo).join()
}

Python中的等效代码确实有效,所以我想知道这在rust中是否可行,如果可行,那么如何实现。

提前谢谢你。

thread::spawn()的文档表明它期望输入一个不带参数的闭包。因此,不能直接使用handle闭包。但是,您可以创建一个不带参数的新闭包来调用您的handle闭包,如下所示:

use std::thread;
fn main() {
let handle = move |data: i32| {
println!("Got {data}")
};
let foo = 123;
thread::spawn(move || {handle(foo)}).join();
}

相关内容

  • 没有找到相关文章