1 #ifndef CRCONCURRENT_H 2 #define CRCONCURRENT_H 3 4 #include "crlocks.h" 5 6 7 #include "lvref.h" 8 #include "lvqueue.h" 9 10 11 enum { 12 CR_THREAD_PRIORITY_LOW, 13 CR_THREAD_PRIORITY_NORMAL, 14 CR_THREAD_PRIORITY_HIGH, 15 }; 16 17 class CRConcurrencyProvider { 18 public: ~CRConcurrencyProvider()19 virtual ~CRConcurrencyProvider() {} 20 virtual CRMutex * createMutex() = 0; 21 virtual CRMonitor * createMonitor() = 0; 22 virtual CRThread * createThread(CRRunnable * threadTask) = 0; 23 virtual void executeGui(CRRunnable * task) = 0; 24 /// execute task delayed; already scheduled but not executed task will be deleted; pass NULL task to cancel active tasks 25 virtual void executeGui(CRRunnable * task, int delayMillis) = 0; 26 /// sleep current thread 27 virtual void sleepMs(int durationMs) = 0; setThreadPriority(int p)28 virtual void setThreadPriority(int p) { 29 CR_UNUSED(p); 30 } 31 }; 32 33 extern CRConcurrencyProvider * concurrencyProvider; 34 35 36 class CRThreadExecutor : public CRRunnable, public CRExecutor { 37 volatile bool _stopped; 38 CRMonitorRef _monitor; 39 CRThreadRef _thread; 40 LVQueue<CRRunnable *> _queue; 41 public: 42 CRThreadExecutor(); 43 virtual ~CRThreadExecutor(); 44 virtual void execute(CRRunnable * task); 45 void stop(); 46 virtual void run(); 47 }; 48 49 50 #endif // CRCONCURRENT_H 51