Mercurial > hg > beaglert
diff core/ClockSyncThread.cpp @ 135:e77e2e712fbc ClockSync
To work with the ClockSync plugin
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Sat, 12 Sep 2015 20:05:55 +0100 |
parents | |
children | 4e2dd3eb1d28 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/ClockSyncThread.cpp Sat Sep 12 20:05:55 2015 +0100 @@ -0,0 +1,67 @@ +#include "ClockSyncThread.h" +#ifdef USE_JUCE +#else //declare static members TODO: rather refactor this similar to other threads so that only run and clockSyncTask are static + myClock_t ClockSyncThread::lastTime; // Used for clock synchronization + bool ClockSyncThread::listening; + ClockSync ClockSyncThread::clockSync; + VirtualClock* ClockSyncThread::virtualClock; + bool ClockSyncThread::threadIsExiting; + AuxiliaryTask ClockSyncThread::clockSyncTask; +#endif +#ifdef USE_JUCE +ClockSyncThread::ClockSyncThread(const String &threadName) : + Thread(threadName) +#else +ClockSyncThread::ClockSyncThread() +#endif /* USE_JUCE */ +{ +}; +ClockSyncThread::~ClockSyncThread(){ +#ifdef USE_JUCE + stopThread(1000); +#else + stopThread(); +#endif /* USE_JUCE */ +} +void ClockSyncThread::init(bool isSlave, int aPort, VirtualClock &aVirtualClock){ + setVirtualClock(aVirtualClock); + listening=false; + clockSync.init(isSlave, aPort, *virtualClock); +#ifdef USE_JUCE + startThread(5); +#else + threadIsExiting=false; + clockSyncTask=BeagleRT_createAuxiliaryTask(&ClockSyncThread::run,98, "clockSyncTask"); + //TODO: the thread cannot be started here at the moment because init() is called in setup(), where tasks cannot be scheduled +#endif /* USE_JUCE */ +} + +#ifdef USE_JUCE +#else +void ClockSyncThread::startThread(){ + printf("starting\n"); + BeagleRT_scheduleAuxiliaryTask(clockSyncTask); + printf("started\n"); +} +void ClockSyncThread::stopThread(){ + threadIsExiting=true; +} +bool ClockSyncThread::threadShouldExit(){ + return(gShouldStop || threadIsExiting ); +} +#endif /* USE_JUCE */ + +void ClockSyncThread::setVirtualClock(VirtualClock &aVirtualClock){ + virtualClock=&aVirtualClock; +}; + +void ClockSyncThread::run(){ + while(!threadShouldExit()){ + clockSync.sendReceiveLoop(); + usleep(5000); +// double now=virtualClock->getNow(); +// printf("th(end+1)=%f;\n", now/44100.0f); +// printf("act(end+1)=%lld;\n", Clock::getTimeUs()); + } + printf("Thread is not running \n"); +}