50 lines
1.0 KiB
C++
50 lines
1.0 KiB
C++
/* timeFunction.cpp */
|
|
#include "noDefaultMethods.h"
|
|
#include "pvType.h"
|
|
#include "timeStamp.h"
|
|
|
|
namespace epics { namespace pvData {
|
|
|
|
class TimeFunctionRequester {
|
|
public:
|
|
virtual void function() = 0;
|
|
};
|
|
|
|
class TimeFunction : private NoDefaultMethods {
|
|
public:
|
|
TimeFunction(TimeFunctionRequester *requester);
|
|
~TimeFunction();
|
|
double timeCall();
|
|
private:
|
|
TimeFunctionRequester *requester;
|
|
};
|
|
|
|
TimeFunction::TimeFunction(TimeFunctionRequester *requester)
|
|
: requester(requester) {}
|
|
|
|
|
|
TimeFunction::~TimeFunction() {}
|
|
|
|
double TimeFunction::timeCall()
|
|
{
|
|
TimeStamp startTime(0,0);
|
|
TimeStamp endTime(0,0);
|
|
double perCall = 0.0;
|
|
long ntimes = 1;
|
|
while(true) {
|
|
startTime.getCurrent();
|
|
for(long i=0; i<ntimes; i++) requester->function();
|
|
endTime.getCurrent();
|
|
double diff = TimeStamp::diffInSeconds(&endTime,&startTime);
|
|
if(diff>=1.0) {
|
|
perCall = diff/(double)ntimes;
|
|
break;
|
|
}
|
|
ntimes *= 2;
|
|
}
|
|
return perCall;
|
|
|
|
}
|
|
|
|
}}
|