#include <stdio.h>
#include <time.h>
#include <thread>
#include <iostream>
#include <chrono>
#include <type_traits>
typedef std::conditional<std::chrono::high_resolution_clock::is_steady,
std::chrono::high_resolution_clock,
std::chrono::steady_clock >::type maxres_steady_clock;
int main(void) {
std::cout << "sleep(3) took: \n\n";
clock_t c_start, c_end;
time_t t_start, t_end;
std::chrono::high_resolution_clock::time_point h_start, h_end;
std::chrono::steady_clock::time_point steady_start, steady_end;
maxres_steady_clock::time_point h_steady_start, h_steady_end;
time(&t_start); // less precise than clock() but always get the real actual time
c_start = clock(); // clock() get only CPU-time, it can be more than real or less - sleep(3); took 0.00 seconds
h_start = std::chrono::high_resolution_clock::now();
steady_start = std::chrono::steady_clock::now();
h_steady_start = maxres_steady_clock::now();
std::this_thread::sleep_for(std::chrono::seconds(3));
h_steady_end = maxres_steady_clock::now();
steady_end = std::chrono::steady_clock::now();
h_end = std::chrono::high_resolution_clock::now();
c_end = clock();
time(&t_end);
std::cout << "maxres_steady = " << std::chrono::duration<double>(h_steady_end - h_steady_start).count() << " s \n";
std::cout << "highres = " << std::chrono::duration<double>(h_end - h_start).count() << " s \n";
std::cout << "steady = " << std::chrono::duration<double>(steady_end - steady_start).count() << " s \n";
printf("clock() = %.2lf seconds \n", (c_end - c_start) / (double)CLOCKS_PER_SEC);
printf("time() = %.2lf seconds \n", difftime(t_end, t_start));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDx0aHJlYWQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdHlwZWRlZiBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6OmlzX3N0ZWFkeSwgCglzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrLAoJc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jayA+Ojp0eXBlIG1heHJlc19zdGVhZHlfY2xvY2s7CgoKaW50IG1haW4odm9pZCkgewoKICAgIHN0ZDo6Y291dCA8PCAic2xlZXAoMykgdG9vazogXG5cbiI7CgogICAgY2xvY2tfdCBjX3N0YXJ0LCBjX2VuZDsKICAgIHRpbWVfdCB0X3N0YXJ0LCB0X2VuZDsKICAgIHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6OnRpbWVfcG9pbnQgaF9zdGFydCwgaF9lbmQ7CiAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IHN0ZWFkeV9zdGFydCwgc3RlYWR5X2VuZDsKICAgIG1heHJlc19zdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgaF9zdGVhZHlfc3RhcnQsIGhfc3RlYWR5X2VuZDsKCiAgICB0aW1lKCZ0X3N0YXJ0KTsgIC8vIGxlc3MgcHJlY2lzZSB0aGFuIGNsb2NrKCkgYnV0IGFsd2F5cyBnZXQgdGhlIHJlYWwgYWN0dWFsIHRpbWUKICAgIGNfc3RhcnQgPSBjbG9jaygpOyAvLyBjbG9jaygpIGdldCBvbmx5IENQVS10aW1lLCBpdCBjYW4gYmUgbW9yZSB0aGFuIHJlYWwgb3IgbGVzcyAtIHNsZWVwKDMpOyB0b29rIDAuMDAgc2Vjb25kcyAKICAgIGhfc3RhcnQgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIHN0ZWFkeV9zdGFydCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOyAKICAgIGhfc3RlYWR5X3N0YXJ0ID0gbWF4cmVzX3N0ZWFkeV9jbG9jazo6bm93KCk7CgogICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDMpKTsKCiAgICBoX3N0ZWFkeV9lbmQgPSBtYXhyZXNfc3RlYWR5X2Nsb2NrOjpub3coKTsKICAgIHN0ZWFkeV9lbmQgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKICAgIGhfZW5kID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICBjX2VuZCA9IGNsb2NrKCk7CiAgICB0aW1lKCZ0X2VuZCk7CgogICAgc3RkOjpjb3V0IDw8ICJtYXhyZXNfc3RlYWR5ID0gIiA8PCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihoX3N0ZWFkeV9lbmQgLSBoX3N0ZWFkeV9zdGFydCkuY291bnQoKSA8PCAiIHMgXG4iOwoKICAgIHN0ZDo6Y291dCA8PCAiaGlnaHJlcyA9ICIgPDwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oaF9lbmQgLSBoX3N0YXJ0KS5jb3VudCgpIDw8ICIgcyBcbiI7CiAgICBzdGQ6OmNvdXQgPDwgInN0ZWFkeSA9ICIgPDwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oc3RlYWR5X2VuZCAtIHN0ZWFkeV9zdGFydCkuY291bnQoKSA8PCAiIHMgXG4iOwoKICAgIHByaW50ZigiY2xvY2soKSA9ICUuMmxmIHNlY29uZHMgXG4iLCAoY19lbmQgLSBjX3N0YXJ0KSAvIChkb3VibGUpQ0xPQ0tTX1BFUl9TRUMpOwogICAgcHJpbnRmKCJ0aW1lKCkgPSAlLjJsZiBzZWNvbmRzIFxuIiwgZGlmZnRpbWUodF9lbmQsIHRfc3RhcnQpKTsKCiAgICByZXR1cm4gMDsKfQ==