async.h 646 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef BB_STD_ASYNC_H
  2. #define BB_STD_ASYNC_H
  3. #include <thread>
  4. #include <atomic>
  5. #include <mutex>
  6. #include <condition_variable>
  7. namespace bbAsync{
  8. struct Semaphore{
  9. int count=0;
  10. std::mutex mutex;
  11. std::condition_variable cond_var;
  12. void wait(){
  13. std::unique_lock<std::mutex> lock( mutex );
  14. while( !count ) cond_var.wait( lock );
  15. --count;
  16. }
  17. void signal(){
  18. std::unique_lock<std::mutex> lock( mutex );
  19. ++count;
  20. cond_var.notify_one();
  21. }
  22. };
  23. struct Event{
  24. void post();
  25. void post( double delay );
  26. virtual void dispatch()=0;
  27. };
  28. void setPostEventFilter( void(*filter)(Event*) );
  29. }
  30. #endif