#pragma once #include "DataMonitor.h" #include #include #include #include #include /** * @brief 数据注入线程类,用于持续向数据监控器注入数据 */ class CSVDataInjectThread { public: /** * @brief 构造函数 * @param csvFilePath CSV文件路径 */ CSVDataInjectThread(std::string csvFilePath); /** * @brief 析构函数 */ ~CSVDataInjectThread(); bool Initialize(std::vector structNames); /** * @brief 启动数据注入线程 */ void start(); /** * @brief 停止数据注入线程 */ void stop(); /** * @brief 从CSV文件读取下一行数据并更新执行时间 * 如果文件读取完毕,将停止线程 */ void updateData(); private: /** * @brief 线程执行函数 */ void threadFunc(); private: std::string m_csvFilePath; std::ifstream m_csvFile; std::unordered_map> m_structInterfaceMap; 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; ///< 下一次执行的时间点 }; using CSVDataInjectThreadPtr = std::shared_ptr;