温馨提示×

rust winapi能否与多线程结合

小樊
81
2024-12-03 21:27:32
栏目: 编程语言

是的,Rust 的 WinAPI 可以与多线程结合使用。在 Rust 中,你可以使用标准库中的 std::thread 模块来创建和管理线程。同时,你还可以使用 WinAPI 提供的多线程相关函数,如 CreateThreadWaitForSingleObject 等。

以下是一个简单的示例,展示了如何在 Rust 中使用 WinAPI 与多线程结合:

use std::thread;
use std::os::windows::raw::HANDLE;
use std::time::Duration;

extern "C" {
    fn Sleep(ms: u32);
}

fn thread_function(handle: HANDLE) {
    println!("Thread started");
    Sleep(1000);
    println!("Thread finished");
    unsafe {
        CloseHandle(handle);
    }
}

fn main() {
    let handle = unsafe {
        CreateThread(
            std::ptr::null_mut(),
            0,
            thread_function as usize,
            std::ptr::null_mut(),
            0,
            std::ptr::null_mut(),
        )
    };

    if handle.is_null() {
        eprintln!("Failed to create thread");
        return;
    }

    println!("Main thread continues...");

    thread::sleep(Duration::from_secs(2));

    println!("Main thread ends");
}

在这个示例中,我们创建了一个新的线程,并在其中执行 thread_function。主线程会继续执行,直到 2 秒后结束。注意,我们需要使用 unsafe 代码块来调用 WinAPI 函数,因为这些函数的签名与 Rust 标准库中的函数不同。

0