31 using namespace std::chrono;
36 high_resolution_clock::time_point realTimeMark;
37 duration<double> realTimeElapsed;
39 clock_t processorTimeMark;
40 double processorTimeElapsed;
42 inline Timer() : processorTimeElapsed(0), realTimeElapsed(0) {};
43 inline void start() {processorTimeMark = clock(); realTimeMark = high_resolution_clock::now();}
44 inline void stop() {processorTimeElapsed += (double)(clock() - processorTimeMark); realTimeElapsed += duration_cast<duration<double>>(high_resolution_clock::now() - realTimeMark);}
45 inline const double realTime()
const{
return realTimeElapsed.count();}
46 inline const double processorTime()
const{
return (
double)processorTimeElapsed/CLOCKS_PER_SEC;}
47 inline const double processorLoad()
const{
return processorTime()/realTime();}
48 inline void reset() {processorTimeElapsed = 0; realTimeElapsed = duration<double>(0);}
50 inline const double estimatedDuration(
double completeness) {
return realTimeElapsed.count()/completeness;}
52 inline const double estimatedRemainder(
double completeness) {
return (1. - completeness) * estimatedDuration(completeness);}
56 inline void sleep(
unsigned int span)
58 std::this_thread::sleep_for(std::chrono::milliseconds(span));