Cogs.Foundation
Loading...
Searching...
No Matches
Threads.h
Go to the documentation of this file.
1#pragma once
2
3#include "../FoundationBase.h"
4
5#include <future>
6#include <mutex>
7#include <thread>
8
9namespace Cogs {
10#if defined(COGS_SINGLETHREADED)
12
13 struct Mutex {
14 constexpr void lock() noexcept {}
15 constexpr void unlock() noexcept {}
16 };
17
20 struct [[nodiscard]] LockGuard {
21 constexpr LockGuard(Mutex& m) noexcept : mutex(m) { mutex.lock(); }
22 constexpr ~LockGuard() noexcept { mutex.unlock(); }
23
24 private:
25 Mutex& mutex;
26 };
27
29 struct [[nodiscard]] UniqueLock {
30 constexpr UniqueLock(Mutex& m) noexcept : mutex(m) { mutex.lock(); }
31 constexpr ~UniqueLock() noexcept { mutex.unlock(); }
32 constexpr UniqueLock(Mutex& m, std::defer_lock_t /*t*/) noexcept
33 : mutex(m)
34 {
35 }
36
38 constexpr void lock() { mutex.lock(); }
39
41 constexpr void unlock() { mutex.unlock(); }
42
43 private:
44 Mutex& mutex;
45 };
46
47 struct Thread {
48 };
49
50 template<typename T> struct Future {
51 T get() { return T(); }
52 bool valid() { return true; }
53 };
54
55 template<> struct Future<void> {
56 void get() {}
57 bool valid() { return true; }
58 };
59
60#else
61 typedef std::thread Thread;
62 typedef std::mutex Mutex;
63 typedef std::lock_guard<Mutex> LockGuard;
64 typedef std::unique_lock<Mutex> UniqueLock;
65
66 template<typename T> using Future = std::future<T>;
67#endif
68
69 namespace Threads {
70 COGSFOUNDATION_API void setName(Thread& thread, const std::string& name);
71 COGSFOUNDATION_API void sleep(int milliseconds);
74 }
75}
#define COGSFOUNDATION_API
Definition: FoundationBase.h:31
COGSFOUNDATION_API void sleep(int milliseconds)
Definition: Threads.Emscripten.cpp:30
COGSFOUNDATION_API size_t hardwareConcurrency()
Definition: Threads.Emscripten.cpp:38
COGSFOUNDATION_API void setName(Thread &thread, const std::string &name)
Definition: Threads.Emscripten.cpp:26
COGSFOUNDATION_API void yield()
Definition: Threads.Emscripten.cpp:34
Main Cogs namespace.
Definition: MortonCode.h:5
std::future< T > Future
Definition: Threads.h:66
std::unique_lock< Mutex > UniqueLock
Definition: Threads.h:64
std::thread Thread
Definition: Threads.h:61
std::mutex Mutex
Definition: Threads.h:62
std::lock_guard< Mutex > LockGuard
Definition: Threads.h:63