xref: /llvm-project/lldb/test/API/commands/expression/timeout/wait-a-while.cpp (revision 99451b4453688a94c6014cac233d371ab4cc342d)
1*99451b44SJordan Rupprecht #include <stdio.h>
2*99451b44SJordan Rupprecht #include <stdint.h>
3*99451b44SJordan Rupprecht 
4*99451b44SJordan Rupprecht #include <chrono>
5*99451b44SJordan Rupprecht #include <thread>
6*99451b44SJordan Rupprecht 
7*99451b44SJordan Rupprecht 
8*99451b44SJordan Rupprecht int
wait_a_while(int microseconds)9*99451b44SJordan Rupprecht wait_a_while (int microseconds)
10*99451b44SJordan Rupprecht {
11*99451b44SJordan Rupprecht     int num_times = 0;
12*99451b44SJordan Rupprecht     auto end_time = std::chrono::system_clock::now() + std::chrono::microseconds(microseconds);
13*99451b44SJordan Rupprecht 
14*99451b44SJordan Rupprecht     while (1)
15*99451b44SJordan Rupprecht     {
16*99451b44SJordan Rupprecht         num_times++;
17*99451b44SJordan Rupprecht         auto wait_time = end_time - std::chrono::system_clock::now();
18*99451b44SJordan Rupprecht 
19*99451b44SJordan Rupprecht         std::this_thread::sleep_for(wait_time);
20*99451b44SJordan Rupprecht         if (std::chrono::system_clock::now() > end_time)
21*99451b44SJordan Rupprecht             break;
22*99451b44SJordan Rupprecht     }
23*99451b44SJordan Rupprecht     return num_times;
24*99451b44SJordan Rupprecht }
25*99451b44SJordan Rupprecht 
26*99451b44SJordan Rupprecht int
main(int argc,char ** argv)27*99451b44SJordan Rupprecht main (int argc, char **argv)
28*99451b44SJordan Rupprecht {
29*99451b44SJordan Rupprecht     printf ("stop here in main.\n");
30*99451b44SJordan Rupprecht     int num_times = wait_a_while (argc * 1000);
31*99451b44SJordan Rupprecht     printf ("Done, took %d times.\n", num_times);
32*99451b44SJordan Rupprecht 
33*99451b44SJordan Rupprecht     return 0;
34*99451b44SJordan Rupprecht 
35*99451b44SJordan Rupprecht }
36