1.初始化队列:给队列属性参数赋值 ,再通过mq_open函数创建队列
void ExternalInit(void)
{
struct mq_attr qattr; //队列属性
qattr.mq_flags = 0;
qattr.mq_maxmsg = EXT_MAX_QUEUE_SIZE;
qattr.mq_msgsize = sizeof(ExternalEvent);
extOutQueue = mq_open("**external_out**", O_CREAT | O_NONBLOCK, 0644, &**qattr**);//线程创建
assert(extOutQueue != -1);
extQuit = false;
}
extOutQueue 代表队列句柄,用来关闭队列。定义:static mqd_t extOutQueue = -1;-1 代表队列未启用。
typedef int mqd_t;
**struct ****mq_attr ****{
long mq_flags; /* message queue flags /
long mq_maxmsg; / maximum number of messages /
long mq_msgsize; / maximum message size /
long mq_curmsgs; / number of messages currently queued /
};*
**2.发送队列 *举例如下,队列格式自定义
evOut.type = EXTERNAL_TEST2;
evOut.arg1 = cmdBuf[4];
evOut.arg2 = cmdBuf[5];
mq_send(extOutQueue, (const char)&evOut, sizeof (ExternalEvent), 0);//发送函数
evOut 为队列中传递的数据,自定义,举例如下
**ExternalEvent evOut **;
typedef struct
{
ExternalEventType type;
int arg1;
int arg2;
int arg3;
uint8_t buf1[EXTERNAL_BUFFER_SIZE];
} ExternalEvent;
typedef enum
{
EXTERNAL_SHOW_MSG, ///< Show message
EXTERNAL_TEST0, ///< Test #0
EXTERNAL_TEST1, ///< Test #1
EXTERNAL_TEST2, ///< Test #2
} ExternalEventType;
3.队列接收 函数举例如下,参数类型同Send函数
mq_receive(extOutQueue, (char)&evIn, sizeof(ExternalEvent), 0)*
返回值>0代表收到数据,返回值-1代表未收到数据。
4. 队列退出
mq_close(extOutQueue);
extOutQueue = -1;
版权归原作者 zhangmian_0206 所有, 如有侵权,请联系我们删除。