area_business_count_checker.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. //添加人数超出限制告警
  25. void _add_person_count_event(const std::shared_ptr<area_hover>&a,int limit_val,const std::string &desc);
  26. //移除人数超出限制告警
  27. void _remove_person_count_event(const std::shared_ptr<area_hover>&a,int limit_val,const std::string &desc);
  28. //添加车数量超出限制告警
  29. void _add_vehicle_count_event(const std::shared_ptr<area_hover>&a,int limit_val,const std::string &desc = "");
  30. //移除车数量超出告警
  31. void _remove_vehicle_count_event(const std::shared_ptr<area_hover>&a,int limit_val,const std::string &desc = "");
  32. private:
  33. std::atomic<int> m_mutex;
  34. void lock()
  35. {
  36. int expected=0;
  37. while(!m_mutex.compare_exchange_strong(expected,1))
  38. expected=0;
  39. assert(m_mutex.load()==1);
  40. }
  41. void unlock()
  42. {
  43. m_mutex.store(0);
  44. }
  45. };
  46. #endif