#include <stdio.h>
#include <time.h>
#include <thread>
#include <iostream>
#include <chrono>
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;
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();
std::this_thread::sleep_for(std::chrono::seconds(3));
steady_end = std::chrono::steady_clock::now();
h_end = std::chrono::high_resolution_clock::now();
c_end = clock();
time(&t_end);
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+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNocm9ubz4KIAppbnQgbWFpbih2b2lkKSB7CgkKCXN0ZDo6Y291dCA8PCAic2xlZXAoMykgdG9vazogXG5cbiI7CiAKCWNsb2NrX3QgY19zdGFydCwgY19lbmQ7Cgl0aW1lX3QgdF9zdGFydCwgdF9lbmQ7CiAgICBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjp0aW1lX3BvaW50IGhfc3RhcnQsIGhfZW5kOwogICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBzdGVhZHlfc3RhcnQsIHN0ZWFkeV9lbmQ7CiAKCXRpbWUoJnRfc3RhcnQpOyAgLy8gbGVzcyBwcmVjaXNlIHRoYW4gY2xvY2soKSBidXQgYWx3YXlzIGdldCB0aGUgcmVhbCBhY3R1YWwgdGltZQogICAgY19zdGFydCA9IGNsb2NrKCk7IC8vIGNsb2NrKCkgZ2V0IG9ubHkgQ1BVLXRpbWUsIGl0IGNhbiBiZSBtb3JlIHRoYW4gcmVhbCBvciBsZXNzIC0gc2xlZXAoMyk7IHRvb2sgMC4wMCBzZWNvbmRzIAogICAgaF9zdGFydCA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgc3RlYWR5X3N0YXJ0ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7IAogCglzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Ioc3RkOjpjaHJvbm86OnNlY29uZHMoMykpOwogCiAgICBzdGVhZHlfZW5kID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAgICBoX2VuZCA9IHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgY19lbmQgPSBjbG9jaygpOwogICAgdGltZSgmdF9lbmQpOwogICAgCiAgICBzdGQ6OmNvdXQgPDwgImhpZ2hyZXMgPSAiIDw8IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KGhfZW5kIC0gaF9zdGFydCkuY291bnQoKSA8PCAiIHMgXG4iOwogICAgc3RkOjpjb3V0IDw8ICJzdGVhZHkgPSAiIDw8IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KHN0ZWFkeV9lbmQgLSBzdGVhZHlfc3RhcnQpLmNvdW50KCkgPDwgIiBzIFxuIjsKCiAgICBwcmludGYoImNsb2NrKCkgPSAlLjJsZiBzZWNvbmRzIFxuIiwgKGNfZW5kIC0gY19zdGFydCkgLyAoZG91YmxlKUNMT0NLU19QRVJfU0VDKTsKICAgIHByaW50ZigidGltZSgpID0gJS4ybGYgc2Vjb25kcyBcbiIsIGRpZmZ0aW1lKHRfZW5kLCB0X3N0YXJ0KSk7CiAKCXJldHVybiAwOwp9