/** * @brief websocket定时发送线程类 * @version V 1.0.0 * @author * @date 创建时间: 2018-08-17\n * @note 2018-08-17 创建类。\n * @warning * @bug */ #pragma once #include #include #include #include #include #include #include #include "thread_safe_map.h" #include "ws_common.h" #include "jsonBuilder.h" #include namespace sys { class wsTimerThread { private: boost::shared_ptr __Thread;//线程 boost::atomic __Enable;//线程是否继续运行的标志 boost::atomic __Running;//线程是否正在运行的标志 boost::condition_variable_any __ExitCond;//条件变量 boost::mutex __ExitMutex;//锁(配合__ExitCond) _THREAD_CONFIG_ __Config;//线程配置 thread_safe_map __CardPosList;//卡位置列表 std::time_t __LastSendTime{0};//上一次发送的时间 jsonBuilder __jsBuilder;//json构造器类 std::mutex m_mtx; // 数据锁 std::vector light_state_list; // 红绿灯状态列表 std::vector device_state_list; // 设备状态列表 std::vector tof_data_list; // tof数据待发送列表 std::vector sb_data_list; // solid ball待发送数据列表 private: /** * @brief 重置函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void __Reset(); /** * @brief 检查线程配置是否合法函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void __ChkConfig(); /** * @brief 发送卡位置函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void __SendCardPos(); void send_card_pos(); void temp_send_card_pos(); void send_light_state(); void send_device_state(); void send_tof_data(); void send_solid_ball_data(); protected: /** * @brief 线程函数。 * @param [in] wsTimerThread* pOwner 线程所属者\n * @return 无\n * @note * @warning * @bug */ void _ThreadFunc( wsTimerThread* pOwner ); public: wsTimerThread(); ~wsTimerThread(); /** * @brief 启动线程函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void Start(); /** * @brief 停止线程函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void Stop(); /** * @brief 初始化函数。 * @param [in] const _THREAD_CONFIG_& Config 线程配置\n * @return 无\n * @note * @warning * @bug */ void Init( const _THREAD_CONFIG_& Config ); /** * @brief 更新卡位置函数。 * @param [in] const _CARD_POS_& pos 卡位置结构体\n * @return 无\n * @note * @warning * @bug */ void upt_card_pos( const _CARD_POS_& pos ); void real_upt_card_pos(const _CARD_POS_& pos); /** * @brief 删除卡位置函数。 * @param [in] const _CARD_POS_& pos 卡位置结构体\n * @return 无\n * @note * @warning * @bug */ void del_card_pos( const _CARD_POS_& pos ); void upt_light_state(const light_state& light); void upt_device_state(const device_state& ds); void upt_tof_data(const tof_data& td); void upt_sb_data(const sb_data& val); }; } //单件定义 typedef boost::serialization::singleton singleton_wsTimerThread; #define swsTimerThrd singleton_wsTimerThread::get_mutable_instance() #define swsTimerThrd_const singleton_wsTimerThread::get_const_instance()