3Gear Systems SDK  v0.9.34
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
Threads.h
1 #pragma once
2 
3 #include <functional>
4 
5 #if defined(_WIN32)
6 // Use native Windows threads:
7 # ifndef NOMINMAX
8 # define NOMINMAX
9 # endif
10 # ifndef WIN32_LEAN_AND_MEAN
11 # define WIN32_LEAN_AND_MEAN
12 # endif
13 # include <Windows.h>
14 #else
15 // Use pthreads on other platforms:
16 # include <pthread.h>
17 #endif
18 
19 class Mutex
20 {
21  friend class SimpleLock;
22 public:
23  Mutex();
24  ~Mutex();
25 
26 private:
27 #ifdef _WIN32
28  HANDLE hMutex_;
29 #else
30  pthread_mutex_t posixMutex_;
31 #endif
32 };
33 
34 class SimpleLock
35 {
36 public:
37  explicit SimpleLock(Mutex& mutex);
38  ~SimpleLock();
39 
40 private:
41  Mutex& mutex_;
42 };
43 
44 class Thread
45 {
46 public:
47  explicit Thread(std::function<void (void)> f);
48  ~Thread();
49  void join();
50  static void sleep(short millis);
51 
52 private:
53  std::function<void (void)> f_;
54 #ifdef _WIN32
55  static DWORD wrapperFunction(LPVOID lpParam);
56 
57  HANDLE hThread_;
58 #else
59  static void* wrapperFunction(void* lpParam);
60 
61  pthread_t posixThreadId_;
62 #endif
63 };
64