I write two timer in C++ and Python, and find out that C++'s is not very accurate compared with Python's.
Here is C++'s code:
#include <chrono>
#include <iomanip> // setprecision
#include <iostream>
using namespace std;
// from: https://stackoverflow.com/a/1658429/6611263
#ifdef _WIN32
#include <windows.h>
void sleep(unsigned milliseconds)
{
Sleep(milliseconds);
}
#else
#include <unistd.h>
void sleep(unsigned milliseconds)
{
usleep(milliseconds * 1000); // takes microseconds
}
#endif
// from: https://stackoverflow.com/a/29560999/6611263
double time()
{
double fractional_seconds_since_epoch
= std::chrono::duration_cast<std::chrono::duration<double>>(
std::chrono::system_clock::now().time_since_epoch()).count();
return fractional_seconds_since_epoch;
}
void test_timer()
{
double t0 = time();
for (int i=0; i<10; i++)
{
sleep(1000);
double duration = time() - t0;
cout << "duration: " << fixed << setprecision(4) << duration << "s\n";
}
}
int main()
{
test_timer();
return 0;
}
C++'s result is here:
duration: 1.0014s
duration: 2.0038s
duration: 3.0072s
duration: 4.0096s
duration: 5.0119s
duration: 6.0143s
duration: 7.0167s
duration: 8.0191s
duration: 9.0205s
duration: 10.0219s
Python's code is here:
import time
def test_timer():
t0 = time.time()
for i in range(10):
time.sleep(1)
duration = time.time() - t0
print("duration: {:.4f}s".format(duration))
pass
pass
def main():
test_timer()
pass
if __name__ == '__main__':
main()
pass
Python's result is here:
duration: 1.0004s
duration: 2.0008s
duration: 3.0012s
duration: 4.0016s
duration: 5.0019s
duration: 6.0023s
duration: 7.0027s
duration: 8.0031s
duration: 9.0035s
duration: 10.0039s
So is there way to record time more accurate in C++? Thank you in advance.
N.B. Environment: WIN 10 x64, C++17, Python 3.7