OneThread.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #ifndef ONETHREAD_H
  2. #define ONETHREAD_H
  3. #include <QObject>
  4. #include <QTimer>
  5. #include <functional>
  6. #include <QThread>
  7. /**
  8. * 这个类提供了一种方便的线程调用方法,可以直接用信号将需要放入新线程
  9. * 运行的函数传递给这个类,然后就会在槽函数中运行这个函数
  10. *
  11. */
  12. class OneThread : public QObject
  13. {
  14. Q_OBJECT
  15. public:
  16. explicit OneThread(QThread* thread, QObject* parent = nullptr);
  17. ~OneThread();
  18. void startThread();
  19. /* 将函数与参数绑定 */
  20. template<typename F, typename... Args>
  21. std::function<void(void)> bindTask(F&& f, Args&&... args)
  22. {
  23. return std::bind(std::forward<F>(f), std::forward<Args>(args)...);
  24. }
  25. signals:
  26. void signal_startThread();
  27. void signal_runTask(std::function<void(void)> func);
  28. private slots:
  29. void do_timeoutWork();
  30. void do_runTask(std::function<void(void)> func);
  31. private:
  32. QTimer m_timerStartThread; /* 开启线程的定时器 */
  33. QThread* m_thread = nullptr;
  34. std::function<void(void)> m_func; /* 运行的函数 */
  35. };
  36. #endif // ONETHREAD_H