that the function we were calling would continue to sleep for the requested time even if it was interrupted. That is not true of std::this_thread::sleep_for, at least not on OS X. Fix the test case so that if it wakes up early, it goes back to sleep till the time is actually greater than the end point. <rdar://problem/18523742> llvm-svn: 219234
36 lines
691 B
C++
36 lines
691 B
C++
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
#include <chrono>
|
|
#include <thread>
|
|
|
|
|
|
int
|
|
wait_a_while (int microseconds)
|
|
{
|
|
int num_times = 0;
|
|
auto end_time = std::chrono::system_clock::now() + std::chrono::microseconds(microseconds);
|
|
|
|
while (1)
|
|
{
|
|
num_times++;
|
|
auto wait_time = end_time - std::chrono::system_clock::now();
|
|
|
|
std::this_thread::sleep_for(wait_time);
|
|
if (std::chrono::system_clock::now() > end_time)
|
|
break;
|
|
}
|
|
return num_times;
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
printf ("stop here in main.\n");
|
|
int num_times = wait_a_while (argc * 1000);
|
|
printf ("Done, took %d times.\n", num_times);
|
|
|
|
return 0;
|
|
|
|
}
|