diff options
Diffstat (limited to 'src/threading.hpp')
-rw-r--r-- | src/threading.hpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/threading.hpp b/src/threading.hpp new file mode 100644 index 0000000..044b5a4 --- /dev/null +++ b/src/threading.hpp | |||
@@ -0,0 +1,73 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include "platform.h" | ||
4 | |||
5 | #define THREADAPI_WINDOWS 1 | ||
6 | #define THREADAPI_PTHREAD 2 | ||
7 | |||
8 | #if (defined(PLATFORM_XBOX) || defined(PLATFORM_WIN32) || defined(PLATFORM_POCKETPC)) | ||
9 | // #pragma message ( "THREADAPI_WINDOWS" ) | ||
10 | #define THREADAPI THREADAPI_WINDOWS | ||
11 | #else // (defined PLATFORM_WIN32) || (defined PLATFORM_POCKETPC) | ||
12 | // #pragma message ( "THREADAPI_PTHREAD" ) | ||
13 | #define THREADAPI THREADAPI_PTHREAD | ||
14 | #endif // (defined PLATFORM_WIN32) || (defined PLATFORM_POCKETPC) | ||
15 | |||
16 | static constexpr int kThreadPrioDefault{ -999 }; | ||
17 | |||
18 | // ################################################################################################# | ||
19 | // ################################################################################################# | ||
20 | #if THREADAPI == THREADAPI_WINDOWS | ||
21 | |||
22 | #if defined(PLATFORM_XBOX) | ||
23 | #include <xtl.h> | ||
24 | #else // !PLATFORM_XBOX | ||
25 | #define WIN32_LEAN_AND_MEAN | ||
26 | // CONDITION_VARIABLE needs version 0x0600+ | ||
27 | // _WIN32_WINNT value is already defined by MinGW, but not by MSVC | ||
28 | #ifndef _WIN32_WINNT | ||
29 | #define _WIN32_WINNT 0x0600 | ||
30 | #endif // _WIN32_WINNT | ||
31 | #include <windows.h> | ||
32 | #endif // !PLATFORM_XBOX | ||
33 | #include <process.h> | ||
34 | |||
35 | /* | ||
36 | #define XSTR(x) STR(x) | ||
37 | #define STR(x) #x | ||
38 | #pragma message( "The value of _WIN32_WINNT: " XSTR(_WIN32_WINNT)) | ||
39 | */ | ||
40 | |||
41 | static constexpr int kThreadPrioMin{ -3 }; | ||
42 | static constexpr int kThreadPrioMax{ +3 }; | ||
43 | |||
44 | // ################################################################################################# | ||
45 | // ################################################################################################# | ||
46 | #else // THREADAPI == THREADAPI_PTHREAD | ||
47 | // ################################################################################################# | ||
48 | // ################################################################################################# | ||
49 | |||
50 | // PThread (Linux, OS X, ...) | ||
51 | |||
52 | // looks like some MinGW installations don't support PTW32_INCLUDE_WINDOWS_H, so let's include it ourselves, just in case | ||
53 | #if defined(PLATFORM_WIN32) | ||
54 | #include <windows.h> | ||
55 | #endif // PLATFORM_WIN32 | ||
56 | #include <pthread.h> | ||
57 | |||
58 | #if defined(PLATFORM_LINUX) && !defined(LINUX_SCHED_RR) | ||
59 | static constexpr int kThreadPrioMin{ 0 }; | ||
60 | #else | ||
61 | static constexpr int kThreadPrioMin{ -3 }; | ||
62 | #endif | ||
63 | static constexpr int kThreadPrioMax{ +3 }; | ||
64 | |||
65 | #endif // THREADAPI == THREADAPI_PTHREAD | ||
66 | // ################################################################################################# | ||
67 | // ################################################################################################# | ||
68 | |||
69 | void THREAD_SETNAME(std::string_view const& name_); | ||
70 | void THREAD_SET_PRIORITY(int prio_, bool sudo_); | ||
71 | void THREAD_SET_AFFINITY(unsigned int aff_); | ||
72 | |||
73 | void THREAD_SET_PRIORITY(std::thread& thread_, int prio_, bool sudo_); | ||