1. 程式人生 > >清空一個訊息佇列, OSQFlush()

清空一個訊息佇列, OSQFlush()

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);
}