how to empty the queue??

nobody wrote on Thursday, February 15, 2007:

Hi all,

I need to empty the queue at certain places in my code.

The only way I can find is reading from queue untill it is empty. But this is not an efficeint method as reading is implemented as a memory copy, and it is wasting time reading all queue data just to throw away.

Is there a function which will just adjust the pointers of queue as it is empty?

I need a very fast queue empty mechanism.


embeddedc wrote on Thursday, February 15, 2007:

You can add the following function to queue.c

void vQueueEmpty( xQueueHandle pxQueue )
    pxNewQueue->uxMessagesWaiting = 0;
    pxNewQueue->pcWriteTo = pxNewQueue->pcHead;
    pxNewQueue->pcReadFrom = pxNewQueue->pcHead + ( ( uxQueueLength - 1 ) * uxItemSize );
    pxNewQueue->xRxLock = queueUNLOCKED;
    pxNewQueue->xTxLock = queueUNLOCKED;
    vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) );
    vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) );

Be vary careful not to call it when there are tasks blocked on the queue!

nobody wrote on Friday, February 16, 2007:


Thank you for your help.

My need involves the need to empty queue even when some tasks are waiting on the queue.

Is there any way to do that??

I will try to use the funtion you provided and modify it according to my need, But it will be good if I get a tested function.