pub struct XwmqRx<'a, const N: XwSz, T>where
[u8; { _ }]: Sized,{ /* private fields */ }
Implementations§
source§impl<'a, const N: XwSz, T> XwmqRx<'a, N, T>where
[u8; { _ }]: Sized,
impl<'a, const N: XwSz, T> XwmqRx<'a, N, T>where
[u8; { _ }]: Sized,
sourcepub fn dq(&self) -> Result<Box<T>, XwmqError>
pub fn dq(&self) -> Result<Box<T>, XwmqError>
等待从消息队列 首端 接收一条消息
- 从消息队列的 首端 取出消息,称为 离队 。
- 当消息队列中没有消息时,接收线程会阻塞等待。
- 当消息队列中有可用的消息时,接收线程被唤醒,并取走一个消息,释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。 - 当线程阻塞等待被中断时,通过
Err()
返回XwmqError::Interrupt
。
§上下文
- 线程
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::Interrupt
等待被中断XwmqError::NotThreadContext
不在线程上下文内XwmqError::DisPmpt
抢占被关闭XwmqError::DisBh
中断底半部被关闭XwmqError::DisIrq
中断被关闭
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.dq();
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn dq_to(&self, to: XwTm) -> Result<Box<T>, XwmqError>
pub fn dq_to(&self, to: XwTm) -> Result<Box<T>, XwmqError>
限时等待从消息队列 首端 接收一条消息
- 从消息队列的 首端 取出消息,称为 离队 。
- 当消息队列中没有消息时,接收线程会阻塞等待,等待时会指定一个唤醒时间点。
- 当消息队列中有可用的消息时,接收线程被唤醒,并取走一个消息,释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。 - 当线程阻塞等待被中断时,通过
Err()
返回XwmqError::Interrupt
。 - 当到达指定的唤醒时间点,线程被唤醒,并通过
Err()
返回XwmqError::Timedout
。
§参数说明
- to: 期望唤醒的时间点
§上下文
- 线程
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::Interrupt
等待被中断XwmqError::Timedout
等待超时XwmqError::NotThreadContext
不在线程上下文内XwmqError::DisPmpt
抢占被关闭XwmqError::DisBh
中断底半部被关闭XwmqError::DisIrq
中断被关闭
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwtm;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.dq_to(xwtm::ft(xwtm::s(1)));
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn dq_unintr(&self) -> Result<Box<T>, XwmqError>
pub fn dq_unintr(&self) -> Result<Box<T>, XwmqError>
等待从消息队列 首端 接收一条消息,且等待不可被中断
- 从消息队列的 首端 取出消息,称为 离队 。
- 当消息队列中没有消息时,接收线程会阻塞等待。
- 接收线程的阻塞等待不可被中断。
- 当消息队列中有可用的消息时,接收线程被唤醒,并取走一个消息,释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。
§上下文
- 线程
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::NotThreadContext
不在线程上下文内XwmqError::DisPmpt
抢占被关闭XwmqError::DisBh
中断底半部被关闭XwmqError::DisIrq
中断被关闭
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.dq();
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn trydq(&self) -> Result<Box<T>, XwmqError>
pub fn trydq(&self) -> Result<Box<T>, XwmqError>
尝试从消息队列 首端 接收一条消息
- 从消息队列的 首端 取出消息,称为 离队 。
- 当消息队列中没有消息时,立即通过
Err()
返回XwmqError::NoMsg
。 - 当消息队列中有可用的消息时,会取走一个消息,并释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。
§上下文
- 任意
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::NoMsg
消息队列中没有消息
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.trydq();
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn rq(&self) -> Result<Box<T>, XwmqError>
pub fn rq(&self) -> Result<Box<T>, XwmqError>
等待从消息队列 尾端 接收一条消息
- 从消息队列的 尾端 取出消息,称为 反向离队 。
- 当消息队列中没有消息时,接收线程会阻塞等待。
- 当消息队列中有可用的消息时,接收线程被唤醒,并取走一个消息,释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。 - 当线程阻塞等待被中断时,通过
Err()
返回XwmqError::Interrupt
。
§上下文
- 线程
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::Interrupt
等待被中断XwmqError::NotThreadContext
不在线程上下文内XwmqError::DisPmpt
抢占被关闭XwmqError::DisBh
中断底半部被关闭XwmqError::DisIrq
中断被关闭
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.rq();
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn rq_to(&self, to: XwTm) -> Result<Box<T>, XwmqError>
pub fn rq_to(&self, to: XwTm) -> Result<Box<T>, XwmqError>
限时等待从消息队列 尾端 接收一条消息
- 从消息队列的 尾端 取出消息,称为 反向离队 。
- 当消息队列中没有消息时,接收线程会阻塞等待,等待时会指定一个唤醒时间点。
- 当消息队列中有可用的消息时,接收线程被唤醒,并取走一个消息,释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。 - 当线程阻塞等待被中断时,通过
Err()
返回XwmqError::Interrupt
。 - 当到达指定的唤醒时间点,线程被唤醒,并通过
Err()
返回XwmqError::Timedout
。
§参数说明
- to: 期望唤醒的时间点
§上下文
- 线程
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::Interrupt
等待被中断XwmqError::Timedout
等待超时XwmqError::NotThreadContext
不在线程上下文内XwmqError::DisPmpt
抢占被关闭XwmqError::DisBh
中断底半部被关闭XwmqError::DisIrq
中断被关闭
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwtm;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.rq_to(xwtm::ft(xwtm::s(1)));
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn rq_unintr(&self) -> Result<Box<T>, XwmqError>
pub fn rq_unintr(&self) -> Result<Box<T>, XwmqError>
等待从消息队列 尾端 接收一条消息,且等待不可被中断
- 从消息队列的 尾端 取出消息,称为 反向离队 。
- 当消息队列中没有消息时,接收线程会阻塞等待。
- 接收线程的阻塞等待不可被中断。
- 当消息队列中有可用的消息时,接收线程被唤醒,并取走一个消息,释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。
§上下文
- 线程
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::NotThreadContext
不在线程上下文内XwmqError::DisPmpt
抢占被关闭XwmqError::DisBh
中断底半部被关闭XwmqError::DisIrq
中断被关闭
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.rq();
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}
sourcepub fn tryrq(&self) -> Result<Box<T>, XwmqError>
pub fn tryrq(&self) -> Result<Box<T>, XwmqError>
尝试从消息队列 尾端 接收一条消息
- 从消息队列的 尾端 取出消息,称为 反向离队 。
- 当消息队列中没有消息时,立即通过
Err()
返回XwmqError::NoMsg
。 - 当消息队列中有可用的消息时,会取走一个消息,并释放消息槽。 若有发送线程正在等待消息槽,将唤醒发送线程。
- 消息 离队 时,会通过
Box::from_raw()
将数据重新放入Box
中,然后通过Ok()
返回。
§上下文
- 任意
§错误码
XwmqError::NotInit
消息队列没有初始化XwmqError::NoMsg
消息队列中没有消息
§示例
extern crate alloc;
use alloc::string::String;
use alloc::string::ToString;
use xwrust::xwmd::xwmq::*;
static MQ: Xwmq<16, String> = Xwmq::new();
pub fn xwrust_example_xwmq() {
let (tx, rx) = MQ.init();
// ...省略...
let rc = rx.tryrq();
match rc {
Ok(d) => { // d是Box<String>
},
Err(e) => { // e是错误码
},
};
// ...省略...
}