blob: 31244a34e601511e13c34c4336ad1bbe4465418a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// engineworker.h
// Created 6/2/2010 by RJ Ryan (rryan@mit.edu)
#ifndef ENGINEWORKER_H
#define ENGINEWORKER_H
#include <atomic>
#include <QObject>
#include <QSemaphore>
#include <QThread>
// EngineWorker is an interface for running background processing work when the
// audio callback is not active. While the audio callback is active, an
// EngineWorker can emit its workReady signal, and an EngineWorkerManager will
// schedule it for running after the audio callback has completed.
class EngineWorkerScheduler;
class EngineWorker : public QThread {
Q_OBJECT
public:
EngineWorker();
virtual ~EngineWorker();
virtual void run();
void setScheduler(EngineWorkerScheduler* pScheduler);
void workReady();
void wakeIfReady();
protected:
QSemaphore m_semaRun;
private:
EngineWorkerScheduler* m_pScheduler;
std::atomic_flag m_notReady;
};
#endif /* ENGINEWORKER_H */
|