RKNNManager.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #ifndef RKNNMANAGER_H
  2. #define RKNNMANAGER_H
  3. #include <thread>
  4. #include <vector>
  5. #include <iostream>
  6. #include <string>
  7. #include "../GrpcTransfer/GrpcTransfer.h"
  8. class RKNNManager
  9. {
  10. public:
  11. static RKNNManager &getInstance()
  12. {
  13. static RKNNManager instance;
  14. return instance;
  15. }
  16. RKNNManager(const RKNNManager &) = delete;
  17. RKNNManager &operator=(const RKNNManager &) = delete;
  18. void setGrpcServerAddress(const std::string &address)
  19. {
  20. m_grpcServerAddress = address;
  21. std::cout << "GRPC Server Address: " << m_grpcServerAddress << std::endl;
  22. }
  23. void addRknnTask(std::string modelData);
  24. // 用于重启特定线程
  25. void restartRknnThread(int threadIndex);
  26. // 检查线程状态并更新线程心跳
  27. void updateThreadStatus(int threadIndex);
  28. void StopProcessData()
  29. {
  30. for(int i = 0; i < m_threads.size(); i++)
  31. {
  32. m_vThreadSwitch[i] = false;
  33. }
  34. for (auto &thread : m_threads)
  35. {
  36. if (thread.joinable())
  37. {
  38. thread.join();
  39. }
  40. }
  41. }
  42. private:
  43. RKNNManager() = default;
  44. ~RKNNManager() = default;
  45. void taskThread(int index, std::string modelData);
  46. // 建立gRPC通道
  47. bool setupGrpcChannel(
  48. const std::string &target_str,
  49. std::unique_ptr<MessageService::Stub> &stub,
  50. std::unique_ptr<grpc::ClientWriter<DataList>> &writer,
  51. grpc::ClientContext &context,
  52. R360::Empty &response);
  53. private:
  54. std::vector<std::thread> m_threads;
  55. std::vector<std::thread::id> m_threadIds;
  56. std::string m_modelData;
  57. std::string m_grpcServerAddress;
  58. // thread switch
  59. std::vector<bool> m_vThreadSwitch;
  60. bool m_bThreadSwitch;
  61. };
  62. #endif // RKNNMANAGER_H