task_command_manager.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // Created by zx on 2019/12/28.
  3. //
  4. #ifndef TASK_COMAND_MANAGER_H
  5. #define TASK_COMAND_MANAGER_H
  6. #include <string>
  7. #include "../error_code/error_code.h"
  8. #include <chrono>
  9. //任务超时时间默认值10000ms,10秒
  10. #define TASK_OVER_TIME_DEFAULT 10000
  11. //任务类型
  12. enum Task_type
  13. {
  14. LASER_TASK=0, //雷达扫描任务
  15. LOCATE_TASK, //测量任务
  16. PLC_TASK, //上传PLC任务
  17. WJ_TASK,
  18. UNKNOW_TASK //未知任务单/初始化
  19. };
  20. //任务状态,如果任务故障,任务状态改为TASK_OVER,然后在m_task_error_manager 补充错误码。
  21. enum Task_statu
  22. {
  23. TASK_CREATED =0, //创建状态,默认值
  24. TASK_SIGNED =1, //已签收
  25. TASK_WORKING =2, //处理中
  26. TASK_OVER =3, //已结束
  27. TASK_ERROR =11, //任务错误
  28. //前面的状态由接收方选择, TASK_DEAD 则是发送方选择.
  29. TASK_DEAD =12, //当任务超时,发送方让任务死亡,
  30. };
  31. //任务单基类
  32. class Task_Base
  33. {
  34. protected:
  35. //不允许构造基类,只允许子类构造,(多态)
  36. Task_Base();
  37. public:
  38. ~Task_Base();
  39. //更新任务单
  40. //task_statu: 任务状态
  41. //statu_information:状态说明
  42. Error_manager update_statu(Task_statu task_statu,std::string statu_information="");
  43. //判断是否超时。返回true表示任务超时,返回false表示任务没有超时
  44. bool is_over_time();
  45. //判断是否结束, TASK_OVER TASK_ERROR TASK_DEAD 都算结束
  46. bool is_task_end();
  47. public:
  48. //获取 任务单id
  49. unsigned int get_task_id();
  50. //设置 任务单id
  51. // void set_task_id(unsigned int task_id) = delete;
  52. //获取 任务类型
  53. Task_type get_task_type();
  54. //设置 任务类型
  55. // void set_task_type(Task_type task_type) = delete;
  56. //获取 任务单状态
  57. Task_statu get_task_statu();
  58. //设置 任务单状态
  59. void set_task_statu(Task_statu task_statu);
  60. //获取 状态说明
  61. std::string get_task_statu_information();
  62. //设置 状态说明
  63. void set_task_statu_information(std::string task_statu_information);
  64. //获取 错误码,返回引用。
  65. Error_manager& get_task_error_manager();
  66. //设置 错误码
  67. void set_task_error_manager(Error_manager & error_manager);
  68. //比较覆盖错误码
  69. void compare_and_cover_task_error_manager(Error_manager & error_manager);
  70. //获取任务接收方
  71. void * get_tast_receiver();
  72. //设置任务接收方
  73. void set_tast_receiver(void * p_tast_receiver);
  74. //获取 任务创建的时间点
  75. std::chrono::system_clock::time_point get_task_start_time();
  76. //设置 任务创建的时间点
  77. void set_task_start_time(std::chrono::system_clock::time_point task_start_time);
  78. //获取 任务超时的时限
  79. std::chrono::milliseconds get_task_over_time();
  80. //设置 任务超时的时限
  81. void get_task_over_time(std::chrono::milliseconds task_over_time);
  82. protected:
  83. unsigned int m_task_id; //任务id, 每次新建任务, 自动+1, 用于多任务的管理
  84. Task_type m_task_type; //任务类型,不允许中途修改
  85. Task_statu m_task_statu; //任务状态
  86. std::string m_task_statu_information; //任务状态说明
  87. void* mp_tast_receiver; //任务接收方,Task_Base并不分配和释放内存。
  88. //注:mp_tast_receiver是可选的,可以为NULL。如果为NULL,则需要task_command_manager去找到接收对象。
  89. std::chrono::system_clock::time_point m_task_start_time; //任务创建的时间点
  90. std::chrono::milliseconds m_task_over_time; //任务超时的时限
  91. //注:std::chrono::system_clock::now(); //获取当前时间
  92. //错误码,任务故障信息,任务输出
  93. Error_manager m_task_error_manager;
  94. };
  95. #endif //TASK_COMAND_MANAGER_H