diff --git a/src/libCom/test/epicsEventTest.cpp b/src/libCom/test/epicsEventTest.cpp index e314a4e76..7fcc6c697 100644 --- a/src/libCom/test/epicsEventTest.cpp +++ b/src/libCom/test/epicsEventTest.cpp @@ -113,24 +113,29 @@ static void producer(void *arg) } // extern "C" -static void eventWaitMeasureDelay( const epicsEventId &id, const double & delay ) +static double eventWaitMeasureDelayError( const epicsEventId &id, const double & delay ) { epicsTime beg = epicsTime::getCurrent(); epicsEventWaitWithTimeout ( id, delay ); epicsTime end = epicsTime::getCurrent(); - printf ( "epicsEventWaitWithTimeout ( %10f ) timed out after %10f sec\n", - delay, end - beg ); + double meas = end - beg; + double error = fabs ( delay - meas ); + printf ( "epicsEventWaitWithTimeout ( %10f ) tmo delay err %10f sec\n", + delay, error ); + return error; } static void eventWaitTest() { + double errorSum = 0.0; epicsEventId event = epicsEventMustCreate ( epicsEventEmpty ); for ( int i = 0u; i < 20; i++ ) { double delay = ldexp ( 1.0 , -i ); - eventWaitMeasureDelay ( event, delay ); + errorSum += eventWaitMeasureDelayError ( event, delay ); } - eventWaitMeasureDelay ( event, 0.0 ); + errorSum += eventWaitMeasureDelayError ( event, 0.0 ); epicsEventDestroy ( event ); + printf ( "Average error %f sec\n", errorSum / ( i + 1 ) ); } diff --git a/src/libCom/test/epicsThreadTest.cpp b/src/libCom/test/epicsThreadTest.cpp index 2ca25f4ed..f253a373a 100644 --- a/src/libCom/test/epicsThreadTest.cpp +++ b/src/libCom/test/epicsThreadTest.cpp @@ -55,22 +55,27 @@ void myThread::run() errlogPrintf("threadFunc %d stopping argvalue %p\n",myPrivate,argvalue); } -static void threadSleepMeasureDelay( const double & delay ) +static double threadSleepMeasureDelayError( const double & delay ) { epicsTime beg = epicsTime::getCurrent(); epicsThreadSleep ( delay ); epicsTime end = epicsTime::getCurrent(); - printf ( "epicsThreadSleep ( %10f ) finished after %10f sec\n", - delay, end - beg ); + double meas = end - beg; + double error = fabs ( delay - meas ); + printf ( "epicsThreadSleep ( %10f ) delay err %10f sec\n", + delay, error ); + return error; } static void threadSleepTest() { + double errorSum = 0.0; for ( int i = 0u; i < 20; i++ ) { double delay = ldexp ( 1.0 , -i ); - threadSleepMeasureDelay ( delay ); + errorSum += threadSleepMeasureDelayError ( delay ); } - threadSleepMeasureDelay ( 0.0 ); + errorSum += threadSleepMeasureDelayError ( 0.0 ); + printf ( "Average error %f sec\n", errorSum / ( i + 1 ) ); } extern "C" void threadTest(int ntasks,int verbose)