aboutsummaryrefslogtreecommitdiff
path: root/src/threading.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/threading.hpp')
-rw-r--r--src/threading.hpp73
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
16static 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
41static constexpr int kThreadPrioMin{ -3 };
42static 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)
59static constexpr int kThreadPrioMin{ 0 };
60#else
61static constexpr int kThreadPrioMin{ -3 };
62#endif
63static constexpr int kThreadPrioMax{ +3 };
64
65#endif // THREADAPI == THREADAPI_PTHREAD
66// #################################################################################################
67// #################################################################################################
68
69void THREAD_SETNAME(std::string_view const& name_);
70void THREAD_SET_PRIORITY(int prio_, bool sudo_);
71void THREAD_SET_AFFINITY(unsigned int aff_);
72
73void THREAD_SET_PRIORITY(std::thread& thread_, int prio_, bool sudo_);