pub struct SelSel<'a, const N: XwSz, const M: XwSz>where
[XwBmp; { _ }]: Sized,{ /* private fields */ }
Expand description
信号选择器的选择子
SelSel<'a, N, M>
与源信号选择器 src
与 目的信号选择器 dst
具有相同的生命周期约束 'a
。因为 SelSel<'a, N, M>
中的 src
与 dst
是引用。
SelSel<'a, N, M>
中包含了绑定的位置,信号选择器 采用 非独占 的方式进行绑定。
选择信号 首先从其他 同步对象 发送给 src
,再由 src
传递给 dst
。
SelSel::selected()
可用来判断信号选择器是否被选择。
当 SelSel<'a, N, M>
被 drop()
时,会自动将 src
从 dst
解绑。
Implementations§
source§impl<'a, const N: XwSz, const M: XwSz> SelSel<'a, N, M>where
[XwBmp; { _ }]: Sized,
impl<'a, const N: XwSz, const M: XwSz> SelSel<'a, N, M>where
[XwBmp; { _ }]: Sized,
sourcepub fn selected(&self, trg: &Bmp<M>) -> bool
pub fn selected(&self, trg: &Bmp<M>) -> bool
判断触发的 选择信号 是否包括此信号选择器
§示例
let msk = Bmp::<8>::new(); // 8位位图
msk.s1all(); // 掩码为0xFF
loop {
let res = sel.select(&msk);
match res {
Ok(t) => { // 信号选择器上有 **选择信号** , `t` 为 **选择信号** 的位图。
if sel0sel.selected(&t) { // 信号选择器0被选择到
let msk0 = Bmp::<16>::new(); // 16位位图
msk0.s1all(); // 掩码为0xFFFF
let res0 = sel0.tryselect(msk0); // 继续从sel0中选择
match res0 {
Ok(t0) => { // 信号选择器0上有 **选择信号** , `t0` 为 **选择信号** 的位图。
},
Err(e0) => { // 等待信号选择器0失败,`e` 为 `SelError`
},
}
}
},
Err(e) => { // 等待信号选择器失败,`e` 为 `SelError`
break;
},
}
}