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