清空一個訊息佇列, OSQFlush()
阿新 • • 發佈:2019-01-25
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); }