00001 #include "gapeaudiodriver.h"
00002
00003 class GapeHelperThread : public QThread {
00004 public:
00005
00006 GapeHelperThread(GapeUnit* u)
00007 : stopped(false),
00008 paused(false) {
00009 unit = u;
00010 }
00011
00012 ~GapeHelperThread() {
00013 stop();
00014 }
00015
00016 void pause() {
00017 paused = true;
00018 }
00019
00020 void unPause(){
00021 paused = false;
00022 wait.wakeOne();
00023 }
00024
00025 bool isPaused() {
00026 return paused;
00027 }
00028
00029 protected:
00030 void run() {
00031 while (true) {
00032 if (paused) wait.wait();
00033 if (stopped) break;
00034 unit->receiveTick(NULL,0);
00035 }
00036 }
00037
00038 private:
00039 void stop() {
00040 stopped = true;
00041 wait.wakeAll();
00042 }
00043
00044 bool stopped, paused;
00045 GapeUnit* unit;
00046 QWaitCondition wait;
00047 };
00048
00049
00050 GapeAudioDriver::GapeAudioDriver()
00051 : GapeUnit(NULL) {
00052 thread = new GapeHelperThread(this);
00053 }
00054
00055 GapeAudioDriver::~GapeAudioDriver() {
00056 delete thread;
00057 }
00058
00059 void GapeAudioDriver::start() {
00060 thread->start();
00061
00062 }
00063
00064 void GapeAudioDriver::pause() {
00065 thread->pause();
00066 }
00067
00068 void GapeAudioDriver::unPause(){
00069 thread->unPause();
00070 }
00071
00072 bool GapeAudioDriver::isPaused() {
00073 return thread->isPaused();
00074 }