XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwisc::Xwcq< TSlotNum, T > 模板类 参考

XWCQ C++ 对象 更多...

#include <Xwcq.hxx>

xwisc::Xwcq< TSlotNum, T > 的协作图:

Public 成员函数

 Xwcq ()
 
 ~Xwcq ()
 
struct xwcqget ()
 获取循环队列内部对象指针
 
xwsz_t capacity ()
 XWCQ API: 获取循环队列的容量 TSlotNum
 
xwsz_t size ()
 XWCQ API: 获取循环队列的单个数据槽的大小 sizeof(T)
 
xwsz_t availability ()
 XWCQ API: 获取循环队列中有效数据槽的数量
 
void flush ()
 清空循环队列
 
xwer_t eq (T *data, xwsz_t *size)
 将数据发送到循环队列的 尾端 (入队,EnQueue)
 
xwer_t jq (T *data, xwsz_t *size)
 将数据发送循环队列的 首端 (插队,Jump the Queue)
 
xwer_t dq (T *data, xwsz_t *size)
 等待从循环队列的 首端 接收数据 (离队,DeQueue)
 
xwer_t dq (T *data, xwsz_t *size, xwtm_t to)
 限时等待从循环队列的 首端 接收数据 (离队,DeQueue)
 
xwer_t dqUnintr (T *data, xwsz_t *size)
 等待从循环队列的 首端 接收数据 (离队,DeQueue), 并且等待不可被中断
 
xwer_t tryDq (T *data, xwsz_t *size)
 尝试从循环队列的 首端 接收数据 (离队,DeQueue)
 
xwer_t rq (T *data, xwsz_t *size)
 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
 
xwer_t rq (T *data, xwsz_t *size, xwtm_t to)
 限时等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
 
xwer_t rqUnintr (T *data, xwsz_t *size)
 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue), 并且等待不可被中断
 
xwer_t tryRq (T *data, xwsz_t *size)
 尝试从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
 
xwer_t pfq (T *data, xwsz_t *size)
 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
 
xwer_t pfq (T *data, xwsz_t *size, xwtm_t to)
 限时等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
 
xwer_t pfqUnintr (T *data, xwsz_t *size)
 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue), 并且等待不可被中断
 
xwer_t tryPfq (T *data, xwsz_t *size)
 尝试从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
 
xwer_t prq (T *data, xwsz_t *size)
 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
 
xwer_t prq (T *data, xwsz_t *size, xwtm_t to)
 限时等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
 
xwer_t prqUnintr (T *data, xwsz_t *size)
 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue), 并且等待不可被中断
 
xwer_t tryPrq (T *data, xwsz_t *size)
 尝试从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
 

Private 属性

struct xwcq mCq
 
xwu8_t mPool [sizeof(T) *TSlotNum]
 

详细描述

template<xwsz_t TSlotNum, typename T>
class xwisc::Xwcq< TSlotNum, T >

XWCQ C++ 对象

在文件 Xwcq.hxx33 行定义.

构造及析构函数说明

◆ Xwcq()

template<xwsz_t TSlotNum, typename T >
xwisc::Xwcq< TSlotNum, T >::Xwcq ( )
inline

在文件 Xwcq.hxx40 行定义.

40{ xwcq_init(&mCq, sizeof(T), TSlotNum, mPool); }
struct xwcq mCq
Definition Xwcq.hxx:36
xwu8_t mPool[sizeof(T) *TSlotNum]
Definition Xwcq.hxx:37
xwer_t xwcq_init(struct xwcq *cq, xwsz_t slotsize, xwsz_t slotnum, xwu8_t *mem)
XWCQ API:初始化循环队列
Definition xwcq.c:94
函数调用图:

◆ ~Xwcq()

template<xwsz_t TSlotNum, typename T >
xwisc::Xwcq< TSlotNum, T >::~Xwcq ( )
inline

在文件 Xwcq.hxx41 行定义.

41{}

成员函数说明

◆ availability()

template<xwsz_t TSlotNum, typename T >
xwsz_t xwisc::Xwcq< TSlotNum, T >::availability ( )
inline

XWCQ API: 获取循环队列中有效数据槽的数量

返回
有效数据槽的数量
注解
  • 上下文:任意

在文件 Xwcq.hxx79 行定义.

79 {
82 return availability;
83 }
xwsz_t availability()
XWCQ API: 获取循环队列中有效数据槽的数量
Definition Xwcq.hxx:79
xwer_t xwcq_get_availability(struct xwcq *cq, xwsz_t *avbbuf)
XWCQ API: 获取循环队列中有效数据槽的数量
Definition xwcq.c:662
unsigned long xwsz_t
Definition type.h:339
函数调用图:
这是这个函数的调用关系图:

◆ capacity()

template<xwsz_t TSlotNum, typename T >
xwsz_t xwisc::Xwcq< TSlotNum, T >::capacity ( )
inline

XWCQ API: 获取循环队列的容量 TSlotNum

返回
容量
注解
  • 上下文:任意

在文件 Xwcq.hxx55 行定义.

55 {
56 xwsz_t cap;
57 xwcq_get_capacity(&mCq, &cap);
58 return cap;
59 }
xwer_t xwcq_get_capacity(struct xwcq *cq, xwsz_t *capbuf)
XWCQ API: 获取循环队列的容量
Definition xwcq.c:644
函数调用图:

◆ dq() [1/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::dq ( T *  data,
xwsz_t size 
)
inline

等待从循环队列的 首端 接收数据 (离队,DeQueue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断。
  • 如果等待被中断,此C++API将返回 -EINTR

在文件 Xwcq.hxx159 行定义.

159 {
160 return xwcq_dq(&mCq, (xwu8_t *)data, size);
161 }
xwsz_t size()
XWCQ API: 获取循环队列的单个数据槽的大小 sizeof(T)
Definition Xwcq.hxx:67
xwer_t xwcq_dq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue)
Definition xwcq.c:217
uint8_t xwu8_t
Definition type.h:194
函数调用图:

◆ dq() [2/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::dq ( T *  data,
xwsz_t size,
xwtm_t  to 
)
inline

限时等待从循环队列的 首端 接收数据 (离队,DeQueue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ETIMEDOUT超时
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断,或等待超时。
  • 如果等待被中断,此C++API将返回 -EINTR
  • to 表示等待超时的时间点:
    • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
    • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

在文件 Xwcq.hxx190 行定义.

190 {
191 return xwcq_dq_to(&mCq, (xwu8_t *)data, size, to);
192 }
xwer_t xwcq_dq_to(struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to)
XWCQ API: 限时等待从循环队列的 首端 接收数据 (离队,DeQueue)
Definition xwcq.c:223
函数调用图:

◆ dqUnintr()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::dqUnintr ( T *  data,
xwsz_t size 
)
inline

等待从循环队列的 首端 接收数据 (离队,DeQueue), 并且等待不可被中断

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待,直到循环队列中有消息可取出。
  • 调用此C++API的线程的阻塞等待不可被中断。

在文件 Xwcq.hxx214 行定义.

214 {
215 return xwcq_dq_unintr(&mCq, (xwu8_t *)data, size);
216 }
xwer_t xwcq_dq_unintr(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列的 首端 接收数据 (离队,DeQueue), 并且等待不可被中断
Definition xwcq.c:256
函数调用图:

◆ eq()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::eq ( T *  data,
xwsz_t size 
)
inline

将数据发送到循环队列的 尾端 (入队,EnQueue)

参数
[in]data数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示待入队的数据大小
  • (O) 作为输出时,返回实际入队的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
注解
  • 上下文:任意
  • 如果传入的数据大小 *size 超过初始化循环队列时指定的 sizeof(T) , 数据将被截断。
  • 如果循环队列数据已被填满,循环队列会循环回队列 首端 的位置, 覆盖掉原数据。
  • 此C++API不会阻塞调用者,因此可以在中断中使用。

在文件 Xwcq.hxx112 行定义.

112 {
113 return xwcq_eq(&mCq, (const xwu8_t *)data, size);
114 }
xwer_t xwcq_eq(struct xwcq *cq, const xwu8_t *data, xwsz_t *size)
XWCQ API:将数据发送到循环队列的 尾端 (入队,EnQueue)
Definition xwcq.c:153
函数调用图:

◆ flush()

template<xwsz_t TSlotNum, typename T >
void xwisc::Xwcq< TSlotNum, T >::flush ( )
inline

清空循环队列

注解
  • 上下文:任意

在文件 Xwcq.hxx91 行定义.

91{ xwcq_flush(&mCq); }
xwer_t xwcq_flush(struct xwcq *cq)
XWCQ API: 清空循环队列
Definition xwcq.c:633
函数调用图:

◆ get()

template<xwsz_t TSlotNum, typename T >
struct xwcq * xwisc::Xwcq< TSlotNum, T >::get ( )
inline

获取循环队列内部对象指针

在文件 Xwcq.hxx46 行定义.

46{ return &mCq; }

◆ jq()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::jq ( T *  data,
xwsz_t size 
)
inline

将数据发送循环队列的 首端 (插队,Jump the Queue)

参数
[in]data数据
[in]size数据的大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
注解
  • 上下文:任意
  • 如果传入的数据大小 *size 超过初始化循环队列时指定的 sizeof(T) , 数据将被截断。
  • 如果循环队列数据已被填满,循环队列会循环回队列 尾端 的位置, 覆盖掉原数据。
  • 此C++API不会阻塞调用者,因此可以在中断中使用。

在文件 Xwcq.hxx132 行定义.

132 {
133 return xwcq_jq(&mCq, (const xwu8_t *)data, size);
134 }
xwer_t xwcq_jq(struct xwcq *cq, const xwu8_t *data, xwsz_t *size)
XWCQ API:将数据发送循环队列的 首端 (插队,Jump the Queue)
Definition xwcq.c:185
函数调用图:

◆ pfq() [1/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::pfq ( T *  data,
xwsz_t size 
)
inline

等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断。
  • 如果等待被中断,此C++API将返回 -EINTR

在文件 Xwcq.hxx360 行定义.

360 {
361 return xwcq_pfq(&mCq, (xwu8_t *)data, size);
362 }
xwer_t xwcq_pfq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
Definition xwcq.c:427
函数调用图:

◆ pfq() [2/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::pfq ( T *  data,
xwsz_t size,
xwtm_t  to 
)
inline

限时等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ETIMEDOUT超时
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断,或等待超时。
  • 如果等待被中断,此CAPI将返回 -EINTR
  • to 表示等待超时的时间点:
    • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
    • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

在文件 Xwcq.hxx392 行定义.

392 {
393 return xwcq_pfq_to(&mCq, (xwu8_t *)data, size, to);
394 }
xwer_t xwcq_pfq_to(struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to)
XWCQ API: 限时等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
Definition xwcq.c:433
函数调用图:

◆ pfqUnintr()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::pfqUnintr ( T *  data,
xwsz_t size 
)
inline

等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue), 并且等待不可被中断

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出。
  • 调用此C++API的线程的阻塞等待不可被中断。

在文件 Xwcq.hxx418 行定义.

418 {
419 return xwcq_pfq_unintr(&mCq, (xwu8_t *)data, size);
420 }
xwer_t xwcq_pfq_unintr(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列 头端 拷贝数据 (Peek at the Front of Queue), 并且等待不可被中断
Definition xwcq.c:463
函数调用图:

◆ prq() [1/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::prq ( T *  data,
xwsz_t size 
)
inline

等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断。
  • 如果等待被中断,此C++API将返回 -EINTR

在文件 Xwcq.hxx464 行定义.

464 {
465 return xwcq_prq(&mCq, (xwu8_t *)data, size);
466 }
xwer_t xwcq_prq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
Definition xwcq.c:523
函数调用图:

◆ prq() [2/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::prq ( T *  data,
xwsz_t size,
xwtm_t  to 
)
inline

限时等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ETIMEDOUT超时
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断,或等待超时。
  • 如果等待被中断,此C++API将返回 -EINTR
  • to 表示等待超时的时间点:
    • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
    • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

在文件 Xwcq.hxx496 行定义.

496 {
497 return xwcq_prq_to(&mCq, (xwu8_t *)data, size, to);
498 }
xwer_t xwcq_prq_to(struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to)
XWCQ API: 限时等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
Definition xwcq.c:529
函数调用图:

◆ prqUnintr()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::prqUnintr ( T *  data,
xwsz_t size 
)
inline

等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue), 并且等待不可被中断

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出。
  • 调用此C++API的线程的阻塞等待不可被中断。

在文件 Xwcq.hxx522 行定义.

522 {
523 return xwcq_prq_unintr(&mCq, (xwu8_t *)data, size);
524 }
xwer_t xwcq_prq_unintr(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue), 并且等待不可被中断
Definition xwcq.c:564
函数调用图:

◆ rq() [1/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::rq ( T *  data,
xwsz_t size 
)
inline

等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断。
  • 如果等待被中断,此C++API将返回 -EINTR

在文件 Xwcq.hxx259 行定义.

259 {
260 return xwcq_rq(&mCq, (xwu8_t *)data, size);
261 }
xwer_t xwcq_rq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
Definition xwcq.c:322
函数调用图:

◆ rq() [2/2]

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::rq ( T *  data,
xwsz_t size,
xwtm_t  to 
)
inline

限时等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EINTR等待被中断
-ETIMEDOUT超时
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出,或等待被中断,或等待超时。
  • 如果等待被中断,此C++API将返回 -EINTR
  • to 表示等待超时的时间点:
    • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
    • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

在文件 Xwcq.hxx290 行定义.

290 {
291 return xwcq_rq_to(&mCq, (xwu8_t *)data, size, to);
292 }
xwer_t xwcq_rq_to(struct xwcq *cq, xwu8_t *data, xwsz_t *size, xwtm_t to)
XWCQ API: 限时等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
Definition xwcq.c:328
函数调用图:

◆ rqUnintr()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::rqUnintr ( T *  data,
xwsz_t size 
)
inline

等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue), 并且等待不可被中断

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENOTTHDCTX不在线程上下文中
-EDISIRQ中断被关闭
-EDISPMPT抢占被关闭
-EDISBH中断底半部被关闭
注解
  • 上下文:线程
  • 若循环队列中数据为空,调用此C++API的线程会阻塞等待, 直到循环队列中有消息可取出。
  • 调用此C++API的线程的阻塞等待不可被中断。

在文件 Xwcq.hxx315 行定义.

315 {
316 return xwcq_rq_unintr(&mCq, (xwu8_t *)data, size);
317 }
xwer_t xwcq_rq_unintr(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 等待从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue), 并且等待不可被中断
Definition xwcq.c:361
函数调用图:

◆ size()

template<xwsz_t TSlotNum, typename T >
xwsz_t xwisc::Xwcq< TSlotNum, T >::size ( )
inline

XWCQ API: 获取循环队列的单个数据槽的大小 sizeof(T)

返回
单个数据槽的大小
注解
  • 上下文:任意

在文件 Xwcq.hxx67 行定义.

67 {
70 return size;
71 }
xwer_t xwcq_get_size(struct xwcq *cq, xwsz_t *szbuf)
XWCQ API: 获取循环队列的单个数据槽的大小
Definition xwcq.c:653
函数调用图:
这是这个函数的调用关系图:

◆ tryDq()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::tryDq ( T *  data,
xwsz_t size 
)
inline

尝试从循环队列的 首端 接收数据 (离队,DeQueue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENODATA循环队列为空
注解
  • 上下文:任意
  • 若循环队列中为空,就立即返回 -ENODATA
  • 此C++API可在中断中使用。

在文件 Xwcq.hxx234 行定义.

234 {
235 return xwcq_trydq(&mCq, (xwu8_t *)data, size);
236 }
xwer_t xwcq_trydq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 尝试从循环队列的 首端 接收数据 (离队,DeQueue)
Definition xwcq.c:289
函数调用图:

◆ tryPfq()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::tryPfq ( T *  data,
xwsz_t size 
)
inline

尝试从循环队列 头端 拷贝数据 (Peek at the Front of Queue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENODATA循环队列为空
注解
  • 上下文:任意
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中为空,就立即返回 -ENODATA ,此CAPI可在中断中使用。

在文件 Xwcq.hxx438 行定义.

438 {
439 return xwcq_trypfq(&mCq, (xwu8_t *)data, size);
440 }
xwer_t xwcq_trypfq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 尝试从循环队列 头端 拷贝数据 (Peek at the Front of Queue)
Definition xwcq.c:493
函数调用图:

◆ tryPrq()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::tryPrq ( T *  data,
xwsz_t size 
)
inline

尝试从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENODATA循环队列为空
注解
  • 上下文:任意
  • 拷贝数据不会取走数据,也不会释放数据槽,数据可被重复拷贝,也可继续被接收。
  • 若循环队列中为空,就立即返回 -ENODATA ,此CAPI可在中断中使用。

在文件 Xwcq.hxx542 行定义.

542 {
543 return xwcq_tryprq(&mCq, (xwu8_t *)data, size);
544 }
xwer_t xwcq_tryprq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 尝试从循环队列 尾端 拷贝数据 (Peek at the Rear of Queue)
Definition xwcq.c:599
函数调用图:

◆ tryRq()

template<xwsz_t TSlotNum, typename T >
xwer_t xwisc::Xwcq< TSlotNum, T >::tryRq ( T *  data,
xwsz_t size 
)
inline

尝试从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)

参数
[out]data指向缓冲区的指针,此缓冲区用于接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示接收缓冲区的大小
  • (O) 作为输出时,返回实际接收的数据大小
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENODATA循环队列为空
注解
  • 上下文:任意
  • 若循环队列中为空,就立即返回 -ENODATA ,此C++API可在中断中使用。

在文件 Xwcq.hxx334 行定义.

334 {
335 return xwcq_tryrq(&mCq, (xwu8_t *)data, size);
336 }
xwer_t xwcq_tryrq(struct xwcq *cq, xwu8_t *data, xwsz_t *size)
XWCQ API: 尝试从循环队列的 尾端 接收数据 (反向离队,Reversely deQueue)
Definition xwcq.c:394
函数调用图:

结构体成员变量说明

◆ mCq

template<xwsz_t TSlotNum, typename T >
struct xwcq xwisc::Xwcq< TSlotNum, T >::mCq
private

在文件 Xwcq.hxx36 行定义.

◆ mPool

template<xwsz_t TSlotNum, typename T >
xwu8_t xwisc::Xwcq< TSlotNum, T >::mPool[sizeof(T) *TSlotNum]
private

在文件 Xwcq.hxx37 行定义.


该类的文档由以下文件生成: