fork download
  1. #include <chrono>
  2. #include <iostream>
  3. #include <queue>
  4. #include <random>
  5. #include <thread>
  6.  
  7. int main()
  8. {
  9. using clock = std::chrono::steady_clock;
  10. using time_point = clock::time_point;
  11. using time_unit = std::chrono::milliseconds;
  12.  
  13. std::default_random_engine engine;
  14. std::uniform_int_distribution<unsigned> dist{0, 15};
  15. std::priority_queue<time_point, std::vector<time_point>, std::greater<time_point>> queue;
  16.  
  17. std::cout << "input:\n";
  18. auto start = clock::now();
  19. for (unsigned i = 0; i != 10; ++i)
  20. {
  21. auto num = dist(engine);
  22. std::cout << num << "\n";
  23. auto time = start + time_unit{num};
  24. queue.push(time);
  25. }
  26.  
  27. std::cout << "output:\n";
  28. while (!queue.empty())
  29. {
  30. auto next = queue.top();
  31. std::this_thread::sleep_until(next);
  32. auto ms = std::chrono::duration_cast<time_unit>(next - start);
  33. std::cout << ms.count() << "\n";
  34. queue.pop();
  35. }
  36. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
input:
0
2
12
7
8
3
0
10
10
14
output:
0
0
2
3
7
8
10
10
12
14