19 #ifndef INCLUDE_RCF_TEST_PROGRAMTIMELIMIT_HPP
20 #define INCLUDE_RCF_TEST_PROGRAMTIMELIMIT_HPP
23 #include <boost/bind.hpp>
24 #include <boost/config.hpp>
26 #include <RCF/ThreadLibrary.hpp>
27 #include <RCF/ThreadPool.hpp>
28 #include <RCF/util/CommandLine.hpp>
30 class ProgramTimeLimit
33 ProgramTimeLimit(
unsigned int timeLimitS)
35 mStartTimeMs = RCF::getCurrentTimeMs();
36 mTimeLimitMs = timeLimitS*1000;
40 mThreadPtr.reset(
new RCF::Thread( boost::bind(&ProgramTimeLimit::poll,
this)));
49 RCF::Lock lock(mStopMutex);
51 mStopCondition.notify_all(lock);
62 RCF::setWin32ThreadName(
"RCF Program Time Limit");
66 unsigned int pollIntervalMs = 1000;
67 RCF::Lock lock(mStopMutex);
68 mStopCondition.timed_wait(lock, pollIntervalMs);
75 unsigned int currentTimeMs = RCF::getCurrentTimeMs();
76 if (currentTimeMs - mStartTimeMs > mTimeLimitMs)
79 <<
"Time limit expired (" << mTimeLimitMs/1000 <<
" (s) ). Killing this test."
90 #elif defined(BOOST_WINDOWS)
92 TerminateProcess(GetCurrentProcess(), 1);
104 unsigned int mStartTimeMs;
105 unsigned int mTimeLimitMs;
106 RCF::ThreadPtr mThreadPtr;
109 RCF::Mutex mStopMutex;
110 RCF::Condition mStopCondition;
113 ProgramTimeLimit * gpProgramTimeLimit = NULL;
115 #endif // ! INCLUDE_RCF_TEST_PROGRAMTIMELIMIT_HPP