#ifndef RKNNMANAGER_H #define RKNNMANAGER_H #include #include #include #include #include "../GrpcTransfer/GrpcTransfer.h" class RKNNManager { public: static RKNNManager &getInstance() { static RKNNManager instance; return instance; } RKNNManager(const RKNNManager &) = delete; RKNNManager &operator=(const RKNNManager &) = delete; void setGrpcServerAddress(const std::string &address) { m_grpcServerAddress = address; std::cout << "GRPC Server Address: " << m_grpcServerAddress << std::endl; } void addRknnTask(std::string modelData); // 用于重启特定线程 void restartRknnThread(int threadIndex); // 检查线程状态并更新线程心跳 void updateThreadStatus(int threadIndex); void StopProcessData() { for(int i = 0; i < m_threads.size(); i++) { m_vThreadSwitch[i] = false; } for (auto &thread : m_threads) { if (thread.joinable()) { thread.join(); } } } private: RKNNManager() = default; ~RKNNManager() = default; void taskThread(int index, std::string modelData); // 建立gRPC通道 bool setupGrpcChannel( const std::string &target_str, std::unique_ptr &stub, std::unique_ptr> &writer, grpc::ClientContext &context, R360::Empty &response); private: std::vector m_threads; std::vector m_threadIds; std::string m_modelData; std::string m_grpcServerAddress; // thread switch std::vector m_vThreadSwitch; bool m_bThreadSwitch; }; #endif // RKNNMANAGER_H