簡體   English   中英

如何從函數返回JoinHandle?

[英]How can I return a JoinHandle from a function?

解決這種情況的最佳方法是什么:

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返回一個用相同類型T參數化的JoinHandle

要使用此信息,您需要知道閉包返回的類型。 知道這一點后,便應使用JoinHandle進行參數化。

您的示例閉包調用println! 返回類型為() ,因此JoinHandle將使用類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM