| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #ifndef REQUESTTHREADPOOL_H
- #define REQUESTTHREADPOOL_H
- #include <QObject>
- #include <QQueue>
- #include <QMutex>
- #include <QWaitCondition>
- #include <QThreadPool>
- #include <QRunnable>
- #include <functional>
- #include <memory>
- namespace TC {
- // 请求任务基类
- class RequestTask : public QObject, public QRunnable
- {
- Q_OBJECT
- public:
- RequestTask() : QObject(), QRunnable() {
- setAutoDelete(false);
- }
- virtual ~RequestTask() {}
-
- virtual void run() = 0;
- virtual bool retry() = 0;
-
- int retryCount() const { return m_retryCount; }
- void incrementRetryCount() { m_retryCount++; }
-
- void setMaxRetries(int maxRetries) { m_maxRetries = maxRetries; }
- int maxRetries() const { return m_maxRetries; }
-
- bool canRetry() const { return m_retryCount < m_maxRetries; }
-
- signals:
- void taskCompleted(bool success);
- void taskFailed();
-
- private:
- int m_retryCount = 0;
- int m_maxRetries = 3; // 默认最多重试3次
- };
- // 线程池管理类
- class RequestThreadPool : public QObject
- {
- Q_OBJECT
- public:
- static RequestThreadPool* instance();
-
- void addTask(std::shared_ptr<RequestTask> task);
- void setMaxThreadCount(int count);
- int activeThreadCount() const;
-
- private:
- RequestThreadPool(QObject* parent = nullptr);
- ~RequestThreadPool();
-
- void processNextTask();
-
- // 在 private slots: 部分修改
- private slots:
- void onTaskCompleted(bool success);
- void onTaskFailed(RequestTask* task); // 修改方法签名,接收任务指针作为参数
- private:
- static RequestThreadPool* s_instance;
- QThreadPool m_threadPool;
- QQueue<std::shared_ptr<RequestTask>> m_taskQueue;
- QMutex m_mutex;
- QWaitCondition m_condition;
- int m_activeTaskCount = 0;
- };
- } // namespace TC
- #endif // REQUESTTHREADPOOL_H
|