#pragma once #include "DataMonitor.h" class DataCollect { public: DataCollect(); ~DataCollect(); public: bool Initialize(std::vector collectDataInfos, std::string dcsFilePath); void start(); void stop(); /** * @brief 从CSV文件读取下一行数据并更新执行时间 * 如果文件读取完毕,将停止线程 */ void updateData(); bool isRunning() const; private: /** * @brief 线程执行函数 */ void threadFunc(); void parseHeaderField(const std::string &headerField); private: std::string m_outputFileName; std::ofstream m_outputFile; std::vector m_collectDataInfos; std::vector m_headerFields; std::thread m_thread; ///< 数据采集线程 std::atomic m_running; ///< 线程运行标志 std::mutex m_mutex; ///< 互斥锁 std::condition_variable m_cv; ///< 条件变量 std::unordered_map m_alreadyStartedMonitors; ///< 已经启动的数据监控器 std::unordered_map m_notStartedMonitors; ///< 未启动的数据监控器 std::unordered_map> m_data; ///< 采集到的数据 std::atomic m_nextExecuteTime; ///< 下一次执行的时间点 int m_collectDuration; ///< 采集时长(秒) int m_collectFrequency; ///< 采集频率(Hz) };