123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #ifndef THREADUTILITY_H
- #define THREADUTILITY_H
- #include <QMutex>
- #include <QObject>
- #include <QPointer>
- #include <QThread>
- #include <QTimer>
- #include <QWaitCondition>
- class ThreadUtility
- {
- public:
- static int GetThreadCount(int processID);
- static bool BlockExitThread(QThread *thread, unsigned long msecs = ULONG_MAX);
- };
- class ThreadWorker : public QObject
- {
- Q_OBJECT
- public:
- explicit ThreadWorker();
- virtual ~ThreadWorker();
- virtual void Start(int interval = -1);
- virtual void NonBlockStop();
- virtual bool BlockStop(unsigned long msecs = ULONG_MAX);
- void SetInterval(int interval);
- protected:
- virtual void DoInit() = 0;
- virtual void DoWork() = 0;
- private slots:
- void OnWorkTimer();
- void OnStartWorkTimer(int msecs);
- signals:
- void sig_Ticked(ThreadWorker *self);
- void sig_StartWorkTimer(int msecs);
- private:
- QTimer *m_pWorkTimer;
- bool m_bInited;
- QMutex m_mutexInited;
- int m_nInterval;
- };
- class WorkerCollector : public QObject
- {
- Q_OBJECT
- public:
- static WorkerCollector* Instance(){return sm_pInstance;}
- ~WorkerCollector();
- void AddWorker(ThreadWorker *worker);
- private:
- WorkerCollector(){}
-
- WorkerCollector(WorkerCollector const&) = delete;
- WorkerCollector& operator=(WorkerCollector const&) = delete;
- private:
- static WorkerCollector* sm_pInstance;
- QList<QPointer<ThreadWorker>> m_listWorkers;
-
-
- private:
- class CollectorGarbo
- {
- public:
- ~CollectorGarbo()
- {
- if (WorkerCollector::sm_pInstance != nullptr)
- delete WorkerCollector::sm_pInstance;
- }
- };
- static CollectorGarbo garbo;
-
- };
- #endif
|