10
10
EngineWorkerScheduler::EngineWorkerScheduler(QObject* pParent)
11
11
: QThreadPool(pParent) {
13
connect(&m_readyMapper, SIGNAL(mapped(QObject*)),
14
this, SLOT(workerReady(QObject*)));
15
connect(&m_startedMapper, SIGNAL(mapped(QObject*)),
16
this, SLOT(workerStarted(QObject*)));
17
connect(&m_finishedMapper, SIGNAL(mapped(QObject*)),
18
this, SLOT(workerFinished(QObject*)));
21
14
EngineWorkerScheduler::~EngineWorkerScheduler() {
25
18
void EngineWorkerScheduler::bindWorker(EngineWorker* pWorker) {
26
m_readyMapper.setMapping(pWorker, pWorker);
27
m_startedMapper.setMapping(pWorker, pWorker);
28
m_finishedMapper.setMapping(pWorker, pWorker);
30
connect(pWorker, SIGNAL(workReady()),
31
&m_readyMapper, SLOT(map()));
32
connect(pWorker, SIGNAL(workStarting()),
33
&m_startedMapper, SLOT(map()));
34
connect(pWorker, SIGNAL(workDone()),
35
&m_finishedMapper, SLOT(map()));
38
void EngineWorkerScheduler::workerReady(QObject* pObject) {
39
EngineWorker* pWorker = dynamic_cast<EngineWorker*>(pObject);
41
QMutexLocker locker(&m_mutex);
42
m_scheduledWorkers.insert(pWorker);
45
void EngineWorkerScheduler::workerStarted(QObject* pObject) {
46
EngineWorker* pWorker = dynamic_cast<EngineWorker*>(pObject);
48
QMutexLocker locker(&m_mutex);
49
m_activeWorkers.insert(pWorker);
52
void EngineWorkerScheduler::workerFinished(QObject* pObject) {
53
EngineWorker* pWorker = dynamic_cast<EngineWorker*>(pObject);
55
QMutexLocker locker(&m_mutex);
56
m_activeWorkers.remove(pWorker);
19
connect(pWorker, SIGNAL(workReady(EngineWorker*)),
20
this, SLOT(workerReady(EngineWorker*)),
21
Qt::DirectConnection);
22
connect(pWorker, SIGNAL(workStarting(EngineWorker*)),
23
this, SLOT(workerStarted(EngineWorker*)),
24
Qt::DirectConnection);
25
connect(pWorker, SIGNAL(workDone(EngineWorker*)),
26
this, SLOT(workerFinished(EngineWorker*)),
27
Qt::DirectConnection);
30
void EngineWorkerScheduler::workerReady(EngineWorker* pWorker) {
32
QMutexLocker locker(&m_mutex);
33
m_scheduledWorkers.insert(pWorker);
37
void EngineWorkerScheduler::workerStarted(EngineWorker* pWorker) {
40
void EngineWorkerScheduler::workerFinished(EngineWorker* pWorker) {