area_business_count_checker.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef _area_business_count_checker_hpp_
  2. #define _area_business_count_checker_hpp_
  3. #include "area_business.h"
  4. #include "atomic"
  5. /*
  6. 判断当前区域a中的人数是否超过设定人数,超过后告警
  7. 区域内实时人数存储在area对象中,在当前类on_enter/on_leave中进行更新
  8. 整个井下的超员和某个区域的超员都使用这个代码
  9. */
  10. struct area_business_count_checker:area_business
  11. {
  12. area_business_count_checker()
  13. {
  14. m_mutex=0;
  15. }
  16. //服务器重启加载数据
  17. void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
  18. //增加计数,并进行判断
  19. void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
  20. void on_hover(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);
  21. //减少计数
  22. void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);
  23. private:
  24. std::atomic<int> m_mutex;
  25. void lock()
  26. {
  27. int expected=0;
  28. while(!m_mutex.compare_exchange_strong(expected,1))
  29. expected=0;
  30. assert(m_mutex.load()==1);
  31. }
  32. void unlock()
  33. {
  34. m_mutex.store(0);
  35. }
  36. };
  37. #endif