Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

74 rindas
1.9 KiB

  1. /***********************************************************************
  2. * Copyright (C) 2025-, XINJE Co., Ltd.
  3. *
  4. * File Name: timeout_handler.h
  5. * Description: Modbus主站的超时处理头文件
  6. * Others:
  7. * Version: v1.0
  8. * Author: weikai XINJE
  9. * Date: 2025-7-30
  10. ***********************************************************************/
  11. #ifndef TIMEOUT_HANDLER_H
  12. #define TIMEOUT_HANDLER_H
  13. #include <QObject>
  14. #include <QTimer>
  15. /**********************************************************************
  16. * Iterates over the contents of a TimeoutHandler.
  17. *TimeoutHandler
  18. *提供超时处理功能,若超过时间未收到响应,则触发超时重发机制
  19. *被SerialCommunicator调用使用
  20. ***********************************************************************/
  21. class TimeoutHandler : public QObject
  22. {
  23. Q_OBJECT
  24. public:
  25. explicit TimeoutHandler(QObject *parent = nullptr);
  26. // 获取当前重试次数
  27. int getCurrentRetryCount() const
  28. {
  29. return currentRetryCount_;
  30. }
  31. // 设置超时时间(毫秒)
  32. void setTimeoutInterval(int msec);
  33. // 获取当前超时时间(毫秒)
  34. int getTimeoutInterval() const;
  35. // 设置最大重试次数
  36. void setRetryCount(int count);
  37. // 获取当前设置的重试次数
  38. int getRetryCount() const;
  39. // 启动超时计时(若已在运行则重启)
  40. void start();
  41. // 停止超时计时并重置重试计数
  42. void stop();
  43. // 判断是否正在计时中
  44. bool isRunning() const;
  45. signals:
  46. // 超时信号(参数为当前重试次数)
  47. void timeoutOccurred(int retryCount);
  48. // 达到最大重试次数信号
  49. void maxRetriesReached();
  50. private:
  51. // 处理定时器超时
  52. void onTimerTimeout();
  53. QTimer *timer_; // 定时器
  54. int timeoutInterval_; // 超时时间(毫秒)
  55. int maxRetryCount_; // 最大重试次数
  56. int currentRetryCount_; // 当前重试次数
  57. };
  58. #endif // TIMEOUT_HANDLER_H