#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static const std::string getExeDirectoryx() { char buffer[MAX_PATH]; if (GetModuleFileNameA(nullptr, buffer, MAX_PATH) == 0) { return ""; // 获取失败时返回空字符串。 } std::filesystem::path exePath(buffer); return exePath.parent_path().string(); } class dsModuleBase : public QObject { public: bool init_flag; // 是否初始化:false/true bool status = true; // 相机状态,用于判断相机是否断开连接 std::string paras; // 传输数据 cv::Mat m_mat; // 传输图片 std::string moduleName; // 模块名称 public: dsModuleBase() {} virtual ~dsModuleBase() {} virtual bool readData(std::vector&, QByteArray&) { return true; } virtual bool writeData(std::vector&, QByteArray&) { return true; } virtual bool initParas(QByteArray&) { return true; } virtual bool run() { return true; } virtual bool checkStatus() { return true; } virtual void showDialog() {}; }; class rpcModuleBase : public QObject { public: rpcModuleBase() {} virtual ~rpcModuleBase() {} virtual QByteArray executeReadCommand(QByteArray& input) = 0; virtual bool executeWriteCommand(QByteArray& input) = 0; virtual bool initParas(QByteArray&) { return true; } virtual bool run() { return true; } virtual void showDialog() {}; }; // ========== 通用超时定时器 ========== // 继承 QThread,到达指定时间后调用外部注册的回调函数。 class CleanupTimer : public QThread { public: CleanupTimer() = default; /// 设置定时时间,单位:毫秒 void setInterval(int msec) { m_intervalMs.store(msec); } /// 获取当前定时时间,单位:毫秒 int intervalMs() const { return m_intervalMs.load(); } /// 注册超时回调函数 void setCallback(std::function callback) { m_callback = std::move(callback); } /// 停止定时器 void stop() { m_runFlag.store(false); } protected: void run() override { m_runFlag.store(true); int counter = 0; while (m_runFlag.load() && counter < m_intervalMs.load()) { QThread::msleep(m_checkMs); counter += m_checkMs; } if (m_runFlag.load() && counter >= m_intervalMs.load()) { if (m_callback) m_callback(); } } private: std::function m_callback; ///< 超时回调函数 std::atomic m_runFlag{ false }; std::atomic m_intervalMs{ 1500 }; int m_checkMs{ 10 }; }; //enum initStatusEnum { // CAMERA_NOT_FOUND, // 未找到相机 // INIT_FAILED, // 初始化失败 // INIT_SUCCESS, // 初始化成功 //}; struct generalResultStruct { bool status; // 初始化状态 std::string message; // 详细信息 }; //class euiCameraModuleBase : public QObject { //public: // virtual ~euiCameraModuleBase() {} // virtual initStatusEnum init(const std::string& initStr) = 0; // 输入配置文件路径,不存在时由调用方引导用户创建 // virtual bool capture(std::vector&) = 0; // 阻塞取图接口,输出参数为取图结果;超时补图由模块内部处理 // virtual bool asyncCapture(std::function&)> callback) = 0; // 异步取图接口,回调参数为取图状态和图像数据 // virtual bool connectionCheck() = 0; // 获取连接状态接口,返回当前相机连接状态 // virtual void clearCache() = 0; // 手动清除相机模块内的缓存 //};