task_base.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /*
  2. * Task_Base 是任务基类,用作不同的模块之间的通信载体。
  3. * 每一个模块创建一个任务子类,从Task_Base继承。
  4. * 然后任务子类自定义一些数据和读写数据的接口函数。
  5. * 然后在任务接受方实现 execute_task(Task_Base* p_laser_task)
  6. * */
  7. #ifndef TASK_BASE_H
  8. #define TASK_BASE_H
  9. #include <string>
  10. #include "../error_code/error_code.h"
  11. #include <chrono>
  12. #include <atomic>
  13. //任务超时时间默认值10000ms,10秒
  14. #define TASK_OVER_TIME_DEFAULT 10000
  15. //任务类型
  16. enum Task_type
  17. {
  18. UNKNOW_TASK =0, //未知任务单//初始化,默认值
  19. LASER_MANGER_SCAN_TASK =1, //雷达管理模块的扫描任务,
  20. LASER_BASE_SCAN_TASK =2, //单个雷达的扫描任务,
  21. LOCATE_MANGER_TASK =3, //测量任务
  22. PLC_TASK =4, //上传PLC任务
  23. WANJI_MANAGER_TASK, //万集雷达管理任务
  24. WANJI_LIDAR_SCAN, //万集雷达扫描任务
  25. WANJI_LIDAR_DETECT, //万集雷达定位任务
  26. DISPATCH_MANAGER_TASK, //调度管理任务
  27. CARRIER_TASK, //搬运器任务
  28. CATCHER_TASK, //抓取器任务
  29. PASSAGEWAY_TASK, //通道口任务
  30. };
  31. //任务状态,如果任务故障,任务状态改为TASK_OVER,然后在m_task_error_manager 补充错误码。
  32. enum Task_statu
  33. {
  34. TASK_CREATED = 0, //任务创建, 发送方
  35. TASK_ISSUE = 1, //任务下发, 发送方
  36. TASK_SIGNED = 2, //已签收, 接收方
  37. TASK_WORKING = 3, //处理中, 接收方
  38. TASK_OVER = 4, //已结束, 接收方
  39. TASK_STOP = 5, //任务暂停, 接收方
  40. TASK_ERROR = 11, //任务错误, 接收方
  41. TASK_CANCEL = 21, //任务取消, 发送方
  42. TASK_DEAD = 22, //任务死亡, 接收方
  43. TASK_WITHDRAW = 31, //任务收回, 发送方
  44. TASK_FREE = 32, //任务释放, 接收方
  45. };
  46. //任务单基类
  47. class Task_Base
  48. {
  49. public:
  50. //任务超时时间默认值10000ms,10秒
  51. #define TASK_OVER_TIME_DEFAULT 10000
  52. //任务类型
  53. enum Task_type
  54. {
  55. UNKNOW_TASK =0, //未知任务单//初始化,默认值
  56. LASER_MANGER_SCAN_TASK =1, //雷达管理模块的扫描任务,
  57. LASER_BASE_SCAN_TASK =2, //单个雷达的扫描任务,
  58. LOCATE_MANGER_TASK =3, //测量任务
  59. PLC_TASK =4, //上传PLC任务
  60. WANJI_MANAGER_TASK, //万集雷达管理任务
  61. WANJI_LIDAR_SCAN, //万集雷达扫描任务
  62. WANJI_LIDAR_DETECT, //万集雷达定位任务
  63. DISPATCH_MANAGER_TASK, //调度管理任务
  64. CARRIER_TASK, //搬运器任务
  65. CATCHER_TASK, //抓取器任务
  66. PASSAGEWAY_TASK, //通道口任务
  67. };
  68. //任务状态,如果任务故障,任务状态改为TASK_OVER,然后在m_task_error_manager 补充错误码。
  69. enum Task_statu
  70. {
  71. TASK_CREATED = 0, //任务创建, 发送方
  72. TASK_ISSUE = 1, //任务下发, 发送方
  73. TASK_SIGNED = 2, //已签收, 接收方
  74. TASK_WORKING = 3, //处理中, 接收方
  75. TASK_OVER = 4, //已结束, 接收方
  76. TASK_STOP = 5, //任务暂停, 接收方
  77. TASK_ERROR = 11, //任务错误, 接收方
  78. TASK_CANCEL = 21, //任务取消, 发送方
  79. TASK_DEAD = 22, //任务死亡, 接收方
  80. TASK_WITHDRAW = 31, //任务收回, 发送方
  81. TASK_FREE = 32, //任务释放, 接收方
  82. };
  83. protected:
  84. //不允许构造基类,只允许子类构造,(多态)
  85. Task_Base();
  86. public:
  87. ~Task_Base();
  88. //初始化任务单,必须初始化之后才可以使用,
  89. // input:tast_receiver 接受对象
  90. // input:task_over_time 超时时间
  91. Error_manager task_init(void* p_tast_receiver,
  92. std::chrono::milliseconds task_over_time);
  93. //初始化任务单,必须初始化之后才可以使用,
  94. // input:task_statu 任务状态
  95. // input:task_statu_information 状态说明
  96. // input:tast_receiver 接受对象
  97. // input:task_over_time 超时时间
  98. Error_manager task_init(Task_statu task_statu,
  99. std::string task_statu_information,
  100. void* p_tast_receiver,
  101. std::chrono::milliseconds task_over_time);
  102. //任务单重置, 相当于重新创建, 会重置时间和错误码.
  103. Error_manager task_reset();
  104. //更新任务单
  105. //task_statu: 任务状态
  106. //statu_information:状态说明
  107. Error_manager update_statu(Task_statu task_statu,std::string statu_information="");
  108. //判断是否超时。返回true表示任务超时,返回false表示任务没有超时
  109. bool is_over_time();
  110. //判断是否结束, TASK_OVER TASK_ERROR TASK_DEAD 都算结束
  111. bool is_task_end();
  112. public:
  113. //获取 任务单id
  114. unsigned int get_task_id();
  115. //设置 任务单id
  116. // void set_task_id(unsigned int task_id) = delete;
  117. //获取 任务类型
  118. Task_type get_task_type();
  119. //设置 任务类型
  120. // void set_task_type(Task_type task_type) = delete;
  121. //获取 任务单状态
  122. Task_statu get_task_statu();
  123. //设置 任务单状态
  124. void set_task_statu(Task_statu task_statu);
  125. //获取 状态说明
  126. std::string get_task_statu_information();
  127. //设置 状态说明
  128. void set_task_statu_information(std::string task_statu_information);
  129. //获取 错误码,返回引用。
  130. Error_manager& get_task_error_manager();
  131. //设置 错误码
  132. void set_task_error_manager(Error_manager & error_manager);
  133. //比较覆盖错误码
  134. void compare_and_cover_task_error_manager(Error_manager & error_manager);
  135. //获取任务接收方
  136. void * get_tast_receiver();
  137. //设置任务接收方
  138. void set_tast_receiver(void * p_tast_receiver);
  139. //获取 任务创建的时间点
  140. std::chrono::system_clock::time_point get_task_start_time();
  141. //设置 任务创建的时间点
  142. void set_task_start_time(std::chrono::system_clock::time_point task_start_time);
  143. //获取 任务超时的时限
  144. std::chrono::milliseconds get_task_over_time();
  145. //设置 任务超时的时限
  146. void set_task_over_time(std::chrono::milliseconds task_over_time);
  147. protected:
  148. unsigned int m_task_id; //任务id, 每次新建任务, 自动+1, 用于多任务的管理
  149. Task_type m_task_type; //任务类型,不允许中途修改
  150. std::atomic<Task_statu> m_task_statu; //任务状态
  151. std::string m_task_statu_information; //任务状态说明
  152. void* mp_tast_receiver; //任务接收方,Task_Base并不分配和释放内存。
  153. //注:mp_tast_receiver是可选的,可以为NULL。如果为NULL,则需要task_command_manager去找到接收对象。
  154. std::chrono::system_clock::time_point m_task_start_time; //任务创建的时间点
  155. std::chrono::milliseconds m_task_over_time; //任务超时的时限
  156. //注:std::chrono::system_clock::now(); //获取当前时间
  157. //错误码,任务故障信息,任务输出
  158. Error_manager m_task_error_manager;
  159. };
  160. #endif //TASK_BASE_H