清空一个消息队列, OSQFlush()

来源:互联网 发布:简历信息采集软件 编辑:程序博客网 时间:2024/05/29 02:20
OSQFlush()函数允许用户删除一个消息队列中的所有消息,重新开始使用。程序清单 L6.26是该函数的源代码。和前面的其它函数一样,该函数首先检查pevent指针是否是执行一个消息队列[L6.26(1)],然后将队列的插入指针和取出指针复位,使它们都指向队列起始单元,同时,将队列中的消息数设为0 [L6.26(2)]。这里,没有检查该消息队列的等待任务列表是否为空,因为只要该等待任务列表不空,.OSQEntries就一定是0。唯一不同的是,指针.OSQIn和.OSQOut此时可以指向消息队列中的任何单元,不一定是起始单元。程序清单 L6.26 清空消息队列INT8U OSQFlush (OS_EVENT *pevent){    OS_Q  *pq;    OS_ENTER_CRITICAL();    if (pevent->OSEventType != OS_EVENT_TYPE_Q) {           (1)        OS_EXIT_CRITICAL();        return (OS_ERR_EVENT_TYPE);    }    pq             = pevent->OSEventPtr;    pq->OSQIn      = pq->OSQStart;                          (2)    pq->OSQOut     = pq->OSQStart;    pq->OSQEntries = 0;    OS_EXIT_CRITICAL();    return (OS_NO_ERR);}

0 0
原创粉丝点击