fork download
  1. #include <atomic>
  2. #include <thread>
  3. #include <future>
  4.  
  5. struct ConditionEvent
  6. {
  7. ConditionEvent(bool initialCondition = false) :
  8. condition(initialCondition)
  9. { }
  10.  
  11. void Set()
  12. {
  13. std::unique_lock<std::mutex> lock(mutex);
  14. condition = true;
  15. variable.notify_all();
  16. }
  17.  
  18. void Reset()
  19. {
  20. std::unique_lock<std::mutex> lock(mutex);
  21. condition = false;
  22. }
  23.  
  24. void Wait()
  25. {
  26. std::unique_lock<std::mutex> lock(mutex);
  27. variable.wait(lock, [this] { return IsSet(); });
  28. }
  29.  
  30. bool IsSet()
  31. {
  32. return condition;
  33. }
  34.  
  35. private:
  36. std::atomic<bool> condition;
  37. std::mutex mutex;
  38. std::condition_variable variable;
  39. };
  40.  
  41. int main()
  42. {
  43. ConditionEvent event;
  44.  
  45. auto f = std::async(std::launch::async, [&] { event.Set(); });
  46.  
  47. event.Wait();
  48. f.get();
  49. }
Success #stdin #stdout 0s 11232KB
stdin
Standard input is empty
stdout
Standard output is empty