XNSim/XNMonitorServer/DataInjectThread.h

67 lines
1.5 KiB
C
Raw Normal View History

#pragma once
#include "DataMonitor.h"
#include <thread>
#include <atomic>
#include <mutex>
#include <condition_variable>
/**
* @brief 线
*/
class DataInjectThread
{
public:
/**
* @brief
* @param dataMonitor
* @param data
* @param frequency (Hz)
*/
DataInjectThread(DataMonitorBasePtr dataMonitor,
std::unordered_map<std::string, std::string> data, double frequency);
/**
* @brief
*/
~DataInjectThread();
/**
* @brief 线
*/
void start();
/**
* @brief 线
*/
void stop();
/**
* @brief
* @param data
*/
void updateData(const std::unordered_map<std::string, std::string> &data);
/**
* @brief
* @param frequency (Hz)
*/
void updateFrequency(double frequency);
private:
/**
* @brief 线
*/
void threadFunc();
private:
std::thread m_thread; ///< 数据注入线程
std::atomic<bool> m_running; ///< 线程运行标志
std::mutex m_mutex; ///< 互斥锁
std::condition_variable m_cv; ///< 条件变量
DataMonitorBasePtr m_dataMonitor; ///< 数据监控器指针
std::unordered_map<std::string, std::string> m_data; ///< 要注入的数据
std::atomic<double> m_frequency; ///< 注入频率
};
using DataInjectThreadPtr = std::shared_ptr<DataInjectThread>;