32 #define printStatus(status, routine, func) \ 33 errlogPrintf("%s: %s failed: %s\n", (func), (routine), strerror(status)) 35 #define checkStatus(status, routine, func) \ 37 printStatus(status, routine, func); \ 40 #define checkStatusReturn(status, routine, func) \ 42 printStatus(status, routine, func); \ 43 return epicsEventError; \ 56 printStatus(status,
"pthread_mutex_init",
"epicsEventCreate");
58 status = pthread_cond_init(&pevent->
cond, 0);
61 printStatus(status,
"pthread_cond_init",
"epicsEventCreate");
62 status = pthread_mutex_destroy(&pevent->
mutex);
63 checkStatus(status,
"pthread_mutex_destroy",
"epicsEventCreate");
74 checkStatus(status,
"pthread_mutex_destroy",
"epicsEventDestroy");
75 status = pthread_cond_destroy(&pevent->
cond);
76 checkStatus(status,
"pthread_cond_destroy",
"epicsEventDestroy");
87 status = pthread_cond_signal(&pevent->
cond);
88 checkStatus(status,
"pthread_cond_signal",
"epicsEventTrigger");
90 status = pthread_mutex_unlock(&pevent->
mutex);
102 status = pthread_cond_wait(&pevent->
cond, &pevent->
mutex);
104 printStatus(status,
"pthread_cond_wait",
"epicsEventWait");
112 status = pthread_mutex_unlock(&pevent->
mutex);
128 while (!status && !pevent->
isFull) {
129 status = pthread_cond_timedwait(&pevent->
cond, &pevent->
mutex,
133 result = (status == ETIMEDOUT) ?
140 status = pthread_mutex_unlock(&pevent->
mutex);
152 printf(
"epicsEvent %p: %s\n", pevent,
153 pevent->
isFull ?
"full" :
"empty");
155 printf(
" pthread_mutex = %p, pthread_cond = %p\n",
LIBCOM_API void convertDoubleToWakeTime(double timeout, struct timespec *wakeTime)
LIBCOM_API epicsEventStatus epicsEventWaitWithTimeout(epicsEventId pevent, double timeout)
Wait an the event or until the specified timeout period is over.
LIBCOM_API epicsEventStatus epicsEventTrigger(epicsEventId pevent)
Trigger an event i.e. ensures the next or current call to wait completes.
#define checkStatusReturn(status, routine, func)
#define checkStatus(status, routine, func)
LIBCOM_API epicsEventId epicsEventCreate(epicsEventInitialState init)
Create an epicsEvent for use from C code, or return NULL.
LIBCOM_API void epicsEventShow(epicsEventId pevent, unsigned int level)
Display information about the semaphore.
#define printStatus(status, routine, func)
LIBCOM_API epicsEventStatus epicsEventTryWait(epicsEventId id)
Similar to wait() except that if the event is currenly empty the call will return immediately with st...
APIs for the epicsEvent binary semaphore.
epicsEventStatus
Return status from several C API routines.
epicsEventInitialState
Possible initial states of a new epicsEvent.
LIBCOM_API epicsEventStatus epicsEventWait(epicsEventId pevent)
Wait for an event.
Defined by POSIX Real Time.
EPICS time-stamps (epicsTimeStamp), epicsTime C++ class and C functions for handling wall-clock times...
LIBCOM_API void epicsEventDestroy(epicsEventId pevent)
Destroy an epicsEvent and any resources it holds.