From 01311de2718438fe310a79d307be73199e460a4d Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Fri, 4 May 2001 21:41:23 +0000 Subject: [PATCH] added timeout and sleep delay tests --- src/libCom/test/epicsEventTest.cpp | 19 +++++++++++++++++++ src/libCom/test/epicsThreadTest.cpp | 19 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/libCom/test/epicsEventTest.cpp b/src/libCom/test/epicsEventTest.cpp index 3f4d2628f..878815655 100644 --- a/src/libCom/test/epicsEventTest.cpp +++ b/src/libCom/test/epicsEventTest.cpp @@ -1,6 +1,7 @@ /* epicsEventTest.cpp */ /* Author: Marty Kraimer Date: 26JAN2000 */ +/* timeout accuracy tests by Jeff Hill */ /********************COPYRIGHT NOTIFICATION********************************** This software was developed under a United States Government license @@ -15,11 +16,13 @@ of this distribution. #include #include #include +#include #include "epicsThread.h" #include "epicsEvent.h" #include "epicsMutex.h" #include "epicsRingPointer.h" +#include "epicsTime.h" #include "errlog.h" @@ -109,6 +112,20 @@ static void producer(void *arg) } } // extern "C" + +static void eventWaitTest() +{ + epicsEventId event = epicsEventMustCreate ( epicsEventEmpty ); + for ( unsigned i = 0u; i < 20; i++ ) { + epicsTime beg = epicsTime::getCurrent(); + double delay = ldexp ( 1.0 , -i ); + epicsEventWaitWithTimeout ( event, delay ); + epicsTime end = epicsTime::getCurrent(); + printf ( "epicsEventWaitWithTimeout ( %g ) timed out after %g sec\n", + delay, end - beg ); + } +} + extern "C" void epicsEventTest(int nthreads,int verbose) { @@ -122,6 +139,8 @@ extern "C" void epicsEventTest(int nthreads,int verbose) time_t tp; int errVerboseSave = errVerbose; + eventWaitTest(); + errVerbose = verbose; event = epicsEventMustCreate(epicsEventEmpty); printf("calling epicsEventWaitWithTimeout(event,2.0) time %ld\n",time(&tp)); diff --git a/src/libCom/test/epicsThreadTest.cpp b/src/libCom/test/epicsThreadTest.cpp index a881f5b62..7e7fd56d8 100644 --- a/src/libCom/test/epicsThreadTest.cpp +++ b/src/libCom/test/epicsThreadTest.cpp @@ -1,6 +1,7 @@ /* epicsThreadTest.cpp */ -/* Author: Marty Kraimer Date: 26JAN2000 */ +/* Author: Marty Kraimer Date: 26JAN2000 */ +/* sleep accuracy tests by Jeff Hill */ /********************COPYRIGHT NOTIFICATION********************************** This software was developed under a United States Government license @@ -15,8 +16,10 @@ of this distribution. #include #include #include +#include #include "epicsThread.h" +#include "epicsTime.h" #include "errlog.h" static epicsThreadPrivate privateKey; @@ -52,6 +55,18 @@ void myThread::run() errlogPrintf("threadFunc %d stopping argvalue %p\n",myPrivate,argvalue); } +static void threadSleepTest() +{ + for ( unsigned i = 0u; i < 20; i++ ) { + epicsTime beg = epicsTime::getCurrent(); + double delay = ldexp ( 1.0 , -i ); + epicsThreadSleep ( delay ); + epicsTime end = epicsTime::getCurrent(); + printf ( "epicsThreadSleep ( %g ) finished after %g sec\n", + delay, end - beg ); + } +} + extern "C" void threadTest(int ntasks,int verbose) { myThread **papmyThread; @@ -60,6 +75,8 @@ extern "C" void threadTest(int ntasks,int verbose) int startPriority,minPriority,maxPriority; int errVerboseSave = errVerbose; + threadSleepTest(); + errVerbose = verbose; errlogInit(4096); papmyThread = (myThread **)calloc(ntasks,sizeof(myThread *));