mirror of
https://github.com/jaredtao/TaoQuick.git
synced 2025-01-31 21:22:58 +08:00
40 lines
1.0 KiB
C
40 lines
1.0 KiB
C
|
#pragma once
|
|||
|
#include "TaoCommonGlobal.h"
|
|||
|
#include "ThreadCommon.h"
|
|||
|
#include <QObject>
|
|||
|
#include <QRunnable>
|
|||
|
namespace TaoCommon {
|
|||
|
// 对Qt线程池的简单封装,适合一次性执行的任务。
|
|||
|
// 用法: ThreadPool::getInstance()->work(workCall, resultCall)
|
|||
|
// workCall是在新线程中执行的任务,resultCall是任务执行完成后,回到调用线程中用来处理执行结果。
|
|||
|
// 不支持任务取消、暂停。
|
|||
|
|
|||
|
class ThreadObject : public QObject, public QRunnable
|
|||
|
{
|
|||
|
Q_OBJECT
|
|||
|
public:
|
|||
|
explicit ThreadObject(const WorkCallback &work);
|
|||
|
void run() override;
|
|||
|
signals:
|
|||
|
void readyResult(bool);
|
|||
|
|
|||
|
private:
|
|||
|
WorkCallback m_workCall;
|
|||
|
};
|
|||
|
class TAO_API ThreadPool : public QObject
|
|||
|
{
|
|||
|
Q_OBJECT
|
|||
|
public:
|
|||
|
static ThreadPool *getInstance()
|
|||
|
{
|
|||
|
static ThreadPool poll;
|
|||
|
return &poll;
|
|||
|
}
|
|||
|
// workCall in sub thread, resultCall in main thread
|
|||
|
void work(const WorkCallback &workCall, const WorkResultCallback &resultCall);
|
|||
|
|
|||
|
private:
|
|||
|
ThreadPool() {}
|
|||
|
};
|
|||
|
} // namespace TaoCommon
|