0417

来源:互联网 发布:婚纱摄影后期软件 编辑:程序博客网 时间:2024/05/07 15:15

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

  1. OSQFlush()函数允许用户删除一个消息队列中的所有消息,重新开始使用。程序清单 L6.26是该函数的源代码。和前面的其它函数一样,该函数首先检查pevent指针是否是执行一个消息队列[L6.26(1)],然后将队列的插入指针和取出指针复位,使它们都指向队列起始单元,同时,将队列中的消息数设为0 [L6.26(2)]。这里,没有检查该消息队列的等待任务列表是否为空,因为只要该等待任务列表不空,.OSQEntries就一定是0。唯一不同的是,指针.OSQIn和.OSQOut此时可以指向消息队列中的任何单元,不一定是起始单元。  
  2.   
  3. 程序清单 L6.26 清空消息队列  
  4. INT8U OSQFlush (OS_EVENT *pevent)  
  5. {  
  6.     OS_Q  *pq;  
  7.   
  8.   
  9.     OS_ENTER_CRITICAL();  
  10.     if (pevent->OSEventType != OS_EVENT_TYPE_Q) {               (1)  
  11.         OS_EXIT_CRITICAL();  
  12.         return (OS_ERR_EVENT_TYPE);  
  13.     }  
  14.     pq             = pevent->OSEventPtr;  
  15.     pq->OSQIn      = pq->OSQStart;                              (2)  
  16.     pq->OSQOut     = pq->OSQStart;  
  17.     pq->OSQEntries = 0;  
  18.     OS_EXIT_CRITICAL();  
  19.     return (OS_NO_ERR);  

0 0