xwrust::xwos::thd

Struct DThdBuilder

source
pub struct DThdBuilder { /* private fields */ }
Expand description

动态线程的工厂模式结构体,可用于配置新线程的属性

spawn 方法将获取构建器的所有权,并使用给定的配置创建线程,返回 Result

thd::spawn 独立的函数,并使用默认配置的 DThdBuilder创建线程,返回 Result

§示例

use xwrust::xwos::thd;

let builder = thd::DThdBuilder::new();

builder.spawn(|_| {
    // 线程代码;
    // 返回值
});

Implementations§

source§

impl DThdBuilder

source

pub fn new() -> DThdBuilder

新建用于创建动态线程的工厂

§示例
use xwrust::xwos::thd;

let builder = thd::DThdBuilder::new()
                               .name("foo".into()) // 设置线程的名称
                               .stack_size(8 * 1024) // 设置线程栈大小
                               .privileged(true); // 设置系统权限

builder.spawn(|_| {
    // 线程代码;
    // 返回值
});
source

pub fn name(self, name: String) -> DThdBuilder

设置动态线程的名称

§示例
use xwrust::xwos::thd;
use libc_print::std_name::println;

let builder = thd::DThdBuilder::new()
                               .name("foo".into()); // 设置线程的名称

builder.spawn(|ele| {
    println!("My name is {}.", ele.name().unwrap());
    // 线程代码;
    // 返回值
});
source

pub fn stack_size(self, size: XwSz) -> DThdBuilder

设置动态线程栈的大小

§示例
use xwrust::xwos::thd;

let builder = thd::DThdBuilder::new()
                               .stack_size(8 * 1024); // 设置线程栈大小

builder.spawn(|_| {
    // 线程代码;
    // 返回值
});
source

pub fn privileged(self, privileged: bool) -> DThdBuilder

设置动态线程栈的系统权限

§示例
use xwrust::xwos::thd;

let builder = thd::DThdBuilder::new()
                               .privileged(true); // 设置系统权限

builder.spawn(|_| {
    // 线程代码;
    // 返回值
});
source

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

消费 DThdBuilder ,并新建一个动态线程

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

方法的签名:

  • 'static 约束是因为新建的线程可能比调用者的生命周期更长,因此线程的闭包和返回值的生命周期限定为静态生命周期;
  • Send 约束是因为闭包和返回值需要在线程之间进行转移。并且被移动到 Send 约束的闭包的变量也必须是 Send 的,否则编译器会报错。 RUSTC是通过 Send 约束来区分闭包是不是另一线程的代码的。
§参数说明
  • f: 线程的闭包
§示例
use xwrust::xwos::thd;

let builder = thd::DThdBuilder::new()
    .name("foo".into()) // 设置线程的名称
    .stack_size(8 * 1024) // 设置线程栈大小
    .privileged(true); // 设置系统权限
match builder.spawn(|_| {
    // 线程代码;
    // 返回值
}) {
    Ok(handler) => {
        match handler.join() {
            Ok(r) => {
                // r 是线程闭包的返回值。
            },
            Err(e) => {
                // `join()` 失败的错误码可通过 `e.state()` 获取。
                // `e` 是 `DThdHandle<R>` ,重新被返回。
            },
        };
    },
    Err(rc) => {
        // `rc` 是 `spawn()` 失败时的错误码。
    }
};
source

pub unsafe fn spawn_unchecked<'a, F, R>( self, f: F, ) -> Result<DThdHandle<R>, XwEr>
where F: FnOnce(Arc<DThdElement>) -> R + Send + 'a, R: Send + 'a,

消费 DThdBuilder ,并产生一个新的动态线程

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

此方法只要求闭包 F 和 返回值 R 的生命周期一样长,然后不做其他限制,因此是 unsafe 的。

§参数说明
  • f: 线程的闭包
§示例
use xwrust::xwos::thd;

let builder = thd::DThdBuilder::new()
    .name("foo".into()) // 设置线程的名称
    .stack_size(8 * 1024) // 设置线程栈大小
    .privileged(true); // 设置系统权限
match unsafe { builder.spawn_unchecked(|_| {
    // 线程代码;
    // 返回值
})} {
    Ok(handler) => {
        match handler.join() {
            Ok(r) => {
                // r 是线程闭包的返回值。
            },
            Err(e) => {
                // join() 失败时的错误码可通过 e.state() 获取。
                // e 是 DThdHandle<R> ,重新被返回。
            },
        };
    },
    Err(rc) => {
        // rc 是 spawn() 失败时的错误码。
    }
};

Auto Trait Implementations§

§

impl Freeze for DThdBuilder

§

impl RefUnwindSafe for DThdBuilder

§

impl Send for DThdBuilder

§

impl Sync for DThdBuilder

§

impl Unpin for DThdBuilder

§

impl UnwindSafe for DThdBuilder

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.