Re: sleep and sleep_for on Linux
I found no difference in the precision of duration of sleeps on my
MacBookPro. Excess time seemed to vary between 110 and 1010us.
Perhaps your system performs differently.
#include <iostream>
#include <thread>
#include <unistd.h> // for sleep()
int main(int argc, const char * argv[])
{
std::chrono::steady_clock::time_point start, end;
start = std::chrono::steady_clock::now();
sleep(1);
end = std::chrono::steady_clock::now();
std::cout << "sleep() took "
<< std::chrono::duration_cast<std::chrono::microseconds>(end -
start).count()
<< "us.\n";
start = std::chrono::steady_clock::now();
usleep(1000000);
end = std::chrono::steady_clock::now();
std::cout << "usleep() took "
<< std::chrono::duration_cast<std::chrono::microseconds>(end -
start).count()
<< "us.\n";
start = std::chrono::steady_clock::now();
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
end = std::chrono::steady_clock::now();
std::cout << "sleep_for() took "
<< std::chrono::duration_cast<std::chrono::microseconds>(end -
start).count()
<< "us.\n";
return 0;
}
sleep() took 1000955us.
usleep() took 1000964us.
sleep_for() took 1000970us.