1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #ifndef _area_business_count_checker_hpp_
- #define _area_business_count_checker_hpp_
- #include "area_business.h"
- #include "atomic"
- /*
- 判断当前区域a中的人数是否超过设定人数,超过后告警
- 区域内实时人数存储在area对象中,在当前类on_enter/on_leave中进行更新
- 整个井下的超员和某个区域的超员都使用这个代码
- */
- struct area_business_count_checker:area_business
- {
- area_business_count_checker()
- {
- m_mutex=0;
- }
- //服务器重启加载数据
- 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);
- //增加计数,并进行判断
- void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
- void on_hover(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);
- //减少计数
- void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);
- private:
- std::atomic<int> m_mutex;
- void lock()
- {
- int expected=0;
- while(!m_mutex.compare_exchange_strong(expected,1))
- expected=0;
- assert(m_mutex.load()==1);
- }
- void unlock()
- {
- m_mutex.store(0);
- }
- };
- #endif
|