Struct std::task::RawWakerVTable

1.36.0 · source ·
pub struct RawWakerVTable { /* private fields */ }
Expand description

虚拟函数指针表 (vtable),用于指定 RawWaker 的行为。

传递给 vtable 内所有函数的指针是来自封闭的 RawWaker 对象的 data 指针。

仅应在 RawWaker 实现内部从正确构造的 RawWaker 对象的 data 指针上调用此结构体内部的函数。 使用任何其他 data 指针调用所包含的函数之一将导致未定义的行为。

这些函数都必须是线程安全的 (即使 RawWaker!Send + !Sync),因为 WakerSend + Sync,因此唤醒器可以移动到任意线程或由 & 引用调用。

例如,这意味着如果 clonedrop 函数管理一个引用计数,它们必须以原子方式进行。

Implementations§

source§

impl RawWakerVTable

const: 1.36.0 · source

pub const fn new( clone: unsafe fn(_: *const ()) -> RawWaker, wake: unsafe fn(_: *const ()), wake_by_ref: unsafe fn(_: *const ()), drop: unsafe fn(_: *const ()) ) -> RawWakerVTable

从提供的 clonewakewake_by_refdrop 函数创建新的 RawWakerVTable

这些函数都必须是线程安全的 (即使 RawWaker!Send + !Sync),因为 WakerSend + Sync,因此唤醒器可以移动到任意线程或由 & 引用调用。

例如,这意味着如果 clonedrop 函数管理一个引用计数,它们必须以原子方式进行。

clone

克隆 RawWaker 时,例如克隆存储 RawWakerWaker 时,将调用此函数。

此函数的实现必须保留 RawWaker 的此附加实例和关联任务所需的所有资源。 在生成的 RawWaker 上调用 wake 应该会唤醒原 RawWaker 会唤醒的相同任务。

wake

Waker 上调用 wake 时将调用此函数。 它必须唤醒与此 RawWaker 相关的任务。

此函数的实现必须确保释放与该 RawWaker 实例和关联任务相关联的所有资源。

wake_by_ref

Waker 上调用 wake_by_ref 时将调用此函数。 它必须唤醒与此 RawWaker 相关的任务。

该函数与 wake 相似,但不能消耗提供的数据指针。

drop

Waker 得到抛弃时,这个函数被调用。

此函数的实现必须确保释放与该 RawWaker 实例和关联任务相关联的所有资源。

Trait Implementations§

source§

impl Clone for RawWakerVTable

source§

fn clone(&self) -> RawWakerVTable

返回值的副本。 Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for RawWakerVTable

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

使用给定的格式化程序格式化该值。 Read more
source§

impl PartialEq<RawWakerVTable> for RawWakerVTable

source§

fn eq(&self, other: &RawWakerVTable) -> bool

此方法测试 selfother 值是否相等,并由 == 使用。
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
source§

impl Copy for RawWakerVTable

source§

impl StructuralPartialEq for RawWakerVTable

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

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

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

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

source§

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

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

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

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

获得所有权后的结果类型。
source§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more
source§

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

§

type Error = Infallible

发生转换错误时返回的类型。
source§

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

执行转换。
source§

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

§

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

发生转换错误时返回的类型。
source§

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

执行转换。