Diarkis C++Client Library API Document
Thread.h
Go to the documentation of this file.
1 // © 2019-2024 Diarkis Inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <thread>
6 #include <functional>
7 #include "diarkis/common.h"
10 #include "diarkis/logging/Logger.h"
11 #include "diarkis/system/result.h"
12 
13 // ADD NAMESPACE NAME TAG
14 namespace Diarkis { namespace System
15 {
16  // Forward declaration
17  class DiarkisThreadImpl;
18 
19  using ThreadFunc = std::function<Diarkis::System::Result(void*)>;
20 
27  enum class DiarkisThreadPriority : std::uint8_t
28  {
29  PRIORITY_HIGHEST = 0,
34  };
35 
44  enum class DiarkisThreadPolicy : std::uint8_t
45  {
47  STANDARD = 0,
49  ROUNDROBIN,
51  FIFO
52  };
53 
63  {
69  uint32_t affinity;
70  };
71 
72 // some platforms do not use std::uint8_t as native type
73 #if defined(DIARKIS_PLATFORM_NINTENDO_SWITCH)
74 using NativeThreadHandle = pthread_t;
75 #else
76 using NativeThreadHandle = std::thread::native_handle_type;
77 #endif // DIARKIS_PLATFORM_NINTENDO_SWITCH
78 
86  {
87  public:
90  // ! Thread priority
97  uint32_t affinityMask;
99  uint32_t stackSize;
100 
101  public:
109  : name("DiarkisDefaultThread")
112  , func(nullptr)
113  , affinityMask(0x0)
114  , stackSize(16 * 1024)
115  {
116  }
117 
124  ~DiarkisThreadParams() = default;
125  };
126 
127 
134  class DIARKIS_EXPORT DiarkisThread
135  {
136  public:
137  DiarkisThread();
138  ~DiarkisThread();
139  public:
146  void SetLoggerFactory(std::shared_ptr<IDiarkisLoggerFactory> loggerFactory);
147 
158  Diarkis::System::Result Start(const DiarkisThreadParams& params,void *args);
159 
167 
174  bool Joinable();
175 
184  Diarkis::System::Result Sleep(uint32_t msec);
185 
192  int GetCurrentCPU();
193 
202  Diarkis::System::Result yield();
203 
204  NativeThreadHandle GetHandle();
205 
206  private:
207  DiarkisThreadImpl* pimpl_;
208 
209  };
210 
211 } }
212 // ADD NAMESPACE } TAG
LoggerFactory.h
Diarkis::System::DiarkisThreadParams::func
ThreadFunc func
Pointer to function to be invoked by thread.
Definition: Thread.h:95
Component.h
Diarkis::System::DiarkisThreadPriority
DiarkisThreadPriority
Represent thread priority.
Definition: Thread.h:27
Diarkis::System::DiarkisThreadPriority::PRIORITY_NORMAL
@ PRIORITY_NORMAL
Diarkis::StdString
Definition: common.h:432
Diarkis::System::DiarkisThreadPolicy::FIFO
@ FIFO
First in-first out scheduling.
Diarkis::System::DiarkisThreadParams::DiarkisThreadParams
DiarkisThreadParams()
DiarkisThreadParams constructor.
Definition: Thread.h:108
Diarkis::System::Result
Contains information about a specific result value. Can be compared against another Result structure....
Definition: result.h:37
Logger.h
Diarkis::System::DiarkisThreadParams::priority
DiarkisThreadPriority priority
Definition: Thread.h:91
Diarkis::System::DiarkisThreadParams
Parameters for thread startup.
Definition: Thread.h:85
Diarkis::System::ThreadFunc
std::function< Diarkis::System::Result(void *)> ThreadFunc
Definition: Thread.h:19
Diarkis::System::DiarkisThreadParams::affinityMask
uint32_t affinityMask
CPU affinity mask.
Definition: Thread.h:97
Diarkis::System::DiarkisThreadPriority::PRIORITY_BELOW_NORMAL
@ PRIORITY_BELOW_NORMAL
Diarkis::System::DiarkisThreadScheduler::policy
DiarkisThreadPolicy policy
Thread policy.
Definition: Thread.h:65
Diarkis::System::DiarkisThreadPriority::PRIORITY_LOWEST
@ PRIORITY_LOWEST
Diarkis::System::DiarkisThreadScheduler::affinity
uint32_t affinity
CPU affinity mask.
Definition: Thread.h:69
Diarkis
Definition: commands.h:9
Diarkis::System::DiarkisThreadParams::name
Diarkis::StdString name
Thread name (PS4: up to 32 bytes including the terminating NULL character) or NULL.
Definition: Thread.h:89
result.h
Diarkis::System::DiarkisThreadPolicy::STANDARD
@ STANDARD
Default.
Diarkis::System::DiarkisThreadParams::policy
DiarkisThreadPolicy policy
Thread policy.
Definition: Thread.h:93
common.h
Diarkis::System::DiarkisThreadPriority::PRIORITY_ABOVE_NORMAL
@ PRIORITY_ABOVE_NORMAL
Diarkis::System::DiarkisThreadScheduler::priority
DiarkisThreadPriority priority
Thread priority.
Definition: Thread.h:67
Diarkis::System::DiarkisThreadPolicy
DiarkisThreadPolicy
Thread scheduling policy.
Definition: Thread.h:44
Diarkis::System::DiarkisThreadPolicy::ROUNDROBIN
@ ROUNDROBIN
Round-robin scheduling.
Diarkis::System::NativeThreadHandle
std::thread::native_handle_type NativeThreadHandle
Definition: Thread.h:76
Diarkis::System::DiarkisThreadParams::~DiarkisThreadParams
~DiarkisThreadParams()=default
DiarkisThreadParams destructor.
Diarkis::System::DiarkisThreadPriority::PRIORITY_HIGHEST
@ PRIORITY_HIGHEST
Diarkis::System::DiarkisThreadScheduler
Thread scheduler.
Definition: Thread.h:62
Diarkis::System::DiarkisThreadParams::stackSize
uint32_t stackSize
Stack size of the thread.
Definition: Thread.h:99
Diarkis::System::DiarkisThread
Interface class for Diarkis thread.
Definition: Thread.h:134