Skip to content
Snippets Groups Projects
Commit 7ecbfa5e authored by rswindell's avatar rswindell
Browse files

Created msgQueueWait().

parent e05855a6
No related branches found
No related tags found
No related merge requests found
......@@ -38,6 +38,7 @@
#include <stdlib.h> /* malloc */
#include <string.h> /* memset */
#include "genwrap.h" /* msclock() */
#include "threadwrap.h" /* GetCurrentThreadId */
#include "msg_queue.h"
......@@ -151,17 +152,33 @@ long msgQueueReadLevel(msg_queue_t* q)
static BOOL list_wait(link_list_t* list, long timeout)
{
#if defined(LINK_LIST_THREADSAFE)
if(timeout==-1) /* infinite */
if(timeout<0) /* infinite */
return listSemWait(list)==0;
if(timeout==0) /* poll */
return listSemTryWait(list)==0;
return listSemTryWaitBlock(list,timeout)==0);
#else
return(TRUE);
clock_t start;
long count;
start=msclock();
while((count=listCountNodes(list))==0) {
if(timeout==0)
break;
if(timeout>0 && msclock()-start > timeout)
break;
YIELD();
}
return(INT_TO_BOOL(count));
#endif
}
BOOL msgQueueWait(msg_queue_t* q, long timeout)
{
return(list_wait(msgQueueReadList(q),timeout));
}
void* msgQueueRead(msg_queue_t* q, long timeout)
{
if(!list_wait(msgQueueReadList(q),timeout))
......
......@@ -67,6 +67,7 @@ long msgQueueDetach(msg_queue_t*);
void* msgQueueSetPrivateData(msg_queue_t*, void*);
void* msgQueueGetPrivateData(msg_queue_t*);
BOOL msgQueueWait(msg_queue_t* q, long timeout);
long msgQueueReadLevel(msg_queue_t*);
void* msgQueueRead(msg_queue_t*, long timeout);
void* msgQueuePeek(msg_queue_t*, long timeout);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment