OROCHI
 
Loading...
Searching...
No Matches
GxThread.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14class GxRandom;
15
16//===========================================================================
18//===========================================================================
20{
21 //-----------------------------------------------------------
23 //-----------------------------------------------------------
25public:
29 virtual ~GxCriticalSection(void);
30
32 //-----------------------------------------------------------
34 //-----------------------------------------------------------
36
38 void lock(void);
40 void unlock(void);
42 b32 tryLock(void);
44 GX_FORCE_INLINE b32 isLocked(void) const { return _lockFlag; }
45
47 //-----------------------------------------------------------
49 //-----------------------------------------------------------
51
53 GX_FORCE_INLINE GxNativeMutex* getMutex(void){ return &_mutex; }
54
56 //-----------------------------------------------------------
58 //-----------------------------------------------------------
60private:
61 GxNativeMutex _mutex;
62 b32 _lockFlag;
63
65};
66
67//===========================================================================
69//===========================================================================
71{
72 //-----------------------------------------------------------
74 //-----------------------------------------------------------
76public:
78 GxScopeCriticalSection(GxCriticalSection* pCriticalSection) : _pCriticalSection(pCriticalSection) { if (_pCriticalSection) _pCriticalSection->lock(); }
80 virtual ~GxScopeCriticalSection(void) { if (_pCriticalSection) _pCriticalSection->unlock(); }
81private:
85 GX_FORCE_INLINE const GxScopeCriticalSection& operator = (const GxScopeCriticalSection&) { return *this; }
86
88 //-----------------------------------------------------------
90 //-----------------------------------------------------------
92private:
94 GxCriticalSection* _pCriticalSection;
95
97};
98
99//===================================================================================
101//===================================================================================
103{
104 //-----------------------------------------------------------
106 //-----------------------------------------------------------
108public:
112 virtual ~GxInterlock(void){}
113
115 //-----------------------------------------------------------
117 //-----------------------------------------------------------
119
121 static s32 increment(volatile s32* pValue);
123 static s32 decrement(volatile s32* pValue);
124
126};
127
128//===========================================================================
130//===========================================================================
132{
133 //-----------------------------------------------------------
135 //-----------------------------------------------------------
137public:
139 GxEvent(void);
141 virtual ~GxEvent(void);
142
144 //-----------------------------------------------------------
146 //-----------------------------------------------------------
148
150 b32 setEvent(void);
152 b32 waitEvent(s32 milliSecond = -1);
153
155 //-----------------------------------------------------------
157 //-----------------------------------------------------------
159protected:
160#if defined(_PS4) || defined(_PS5)
161 GxNativeThreadCondition _cond;
162 GxCriticalSection _criticalSection;
163 volatile s32 _setCount;
164#elif defined(_WINDOWS) || defined(_XBOX_XS)
165 HANDLE _handle;
166#elif defined(_NX64)
167 GxNativeThreadEvent _event;
168#endif //_NX64
169
171};
172
173//===========================================================================
175//===========================================================================
176class GxThread : public GxClassBase
177{
178 //-------------------------------------------------------------
180 //-------------------------------------------------------------
182public:
183 GX_RTTI_ABSTRACT_CLASS(GxThread, GxClassBase)
184 // GxClassBase継承クラス用禁止宣言
186
187
188 static constexpr u32 THREAD_MAX = GxMath::VALUE_32;
190 static constexpr u32 INVALID_INDEX = 0xFFFFFFFF;
192 static constexpr u32 MAIN_THREAD_INDEX = 0;
193#if GX_DEVELOP
195 static constexpr u32 NAME_LENGTH = 27;
196#endif
198 enum class PRIORITY
199 {
200 LOW = -2,
201 BELOW,
202 NORMAL,
203 ABOVE,
204 HIGH,
205 MAX = 5,
206 };
207#if GX_DEVELOP
209 GX_ENUM_TABLE_MAX(PRIORITY)
210#endif //GX_DEVELOP
211
213#if defined(_PS4)
214 static constexpr u32 HARDWARE_THREAD_MAX = 6;
215#elif defined(_WINDOWS)
216 static constexpr u32 HARDWARE_THREAD_MAX = GxMath::VALUE_32;
217#elif defined(_NX64)
218 static constexpr u32 HARDWARE_THREAD_MAX = 3;
219#elif defined(_PS5)
220 static constexpr u32 HARDWARE_THREAD_MAX = 12;
221#elif defined(_XBOX_XS)
222 static constexpr u32 HARDWARE_THREAD_MAX = 14;
223#endif //_XBOX_XS
224
226 //-------------------------------------------------------------
228 //-------------------------------------------------------------
230public:
232 GxThread(void);
234 ~GxThread(void) override;
235
237 //-------------------------------------------------------------
239 //-------------------------------------------------------------
241
242#if defined(_WINDOWS) || defined(_XBOX_XS)
244 constexpr u32 getId(void) const { return _threadId; }
246 constexpr void setId(u32 id){ _threadId = id; }
247#endif //_WINDOWS || _XBOX_XS
249 b32 isStop(void) const;
251 constexpr u32 getIndex(void) const { return _index; }
253#if defined(GX_THREAD_LOCAL_STORAGE)
254 GX_FORCE_INLINE static GxThread* getCurrentThread(void){ return _pThread; }
255#else //GX_THREAD_LOCAL_STORAGE
256 static GxThread* getCurrentThread(void);
257#endif //GX_THREAD_LOCAL_STORAGE
259 constexpr GxRandom* getRandomGenerator(void) const { return _pRandomGenerator; }
260#if GX_DEVELOP
262 constexpr GX_CSTR getName(void) const { return _name; }
263#endif //GX_DEVELOP
265 GX_FORCE_INLINE static void setFixThread(b32 on){ _fixThreadFlag = on; }
267 GX_FORCE_INLINE static b32 isFixThread(void){ return _fixThreadFlag; }
268
270 //-------------------------------------------------------------
272 //-------------------------------------------------------------
274
276 static b32 casU32(volatile u32* pTarget, u32 oldValue, u32 newValue);
278 static b32 casPointer(volatile void** ppTarget, void* pOld, void* pNew);
280 static void barrierMemory(void);
282 static void atomicExchangeU32(volatile u32* pTarget, u32 newValue);
283
285#if GX_DEVELOP
286 b32 create(void* pIn, PRIORITY priority, u32 stackSize, s32 cpuIndex = -1, GX_CSTR name = "GxThread", b32 profile = false);
287#else //GX_DEVELOP
288 b32 create(void* pIn, PRIORITY priority, u32 stackSize, s32 cpuIndex = -1);
289#endif // !GX_DEVELOP
291 void suspend(void);
293 void resume(void);
295 static void sleep(u32 milliSecond);
296protected:
298 virtual void createCallback(void){}
300 virtual void threadMain(void* pArgument) = 0;
302 void stop(void);
303
304private:
306 constexpr void setIndex(u32 index){ _index = index; }
308#if defined(_PS4)
309 static void* WINAPI startRoutine(void* pContext);
310#elif defined(_PS5)
311 static void* startRoutine(void* pContext);
312#elif defined(_WINDOWS) || defined(_XBOX_XS)
313 static u32 WINAPI startRoutine(void* pContext);
314#elif defined(_NX64)
315 static void startRoutine(void* pContext);
316#endif //_NX64
318 void closeHandle(void);
319
321 //-------------------------------------------------------------
323 //-------------------------------------------------------------
325protected:
326#if defined(GX_THREAD_LOCAL_STORAGE)
327 static GX_THREAD_LOCAL_STORAGE GxThread* _pThread;
328#else //GX_THREAD_LOCAL_STORAGE
329 static GxThread* _pThread[THREAD_MAX];
330#endif // !GX_THREAD_LOCAL_STORAGE
331 static u32 _num;
332 GxNativeThread _threadId;
333private:
334 static GxCriticalSection _criticalSection;
335 static GxFlag32Bit _indexEnableBitFlag;
336 static b32 _fixThreadFlag;
337 u32 _index;
338#if defined(_NX64)
339 void* _pStack;
340 GxNativeMutex _mutex;
341#endif //_NX64
342
343#if defined(_WINDOWS) || defined(_XBOX_XS)
344protected:
345 HANDLE _handle;
346#else //_WINDOWS || _XBOX_XS
347private:
348 b32 _exitFlag;
349#endif // !(_WINDOWS || _XBOX_XS)
350 void* _pArgument;
351 GxEvent _initializeEvent;
352 GxRandom* _pRandomGenerator;
353
354#if GX_DEVELOP
355protected:
356 b32 _profileFlag;
357 GX_CHAR _name[NAME_LENGTH + 1];
358#endif //GX_DEVELOP
359
361};
362
364
365//===========================================================================
367//===========================================================================
369{
370 //-------------------------------------------------------------
372 //-------------------------------------------------------------
374public:
375 GX_RTTI_CLASS(GxWorkerThread, GxThread)
376 // GxClassBase継承クラス用禁止宣言
378
379
380 //-------------------------------------------------------------
382 //-------------------------------------------------------------
384
386 GxWorkerThread(void) : _workerIndex(0), _pOwner(nullptr), _requestStopFlag(false), _initializeLocalStorageFlag(false){}
388 static void initializeMainThread(void);
390 static void terminateMainThread(void);
393
395 //-------------------------------------------------------------
397 //-------------------------------------------------------------
399
401 constexpr GxWorkerThreadManager* getOwner(void) const { return _pOwner; }
403 constexpr void setOwner(GxWorkerThreadManager* pOwner){ _pOwner = pOwner; }
405 constexpr u32 getWorkerIndex(void) const { return _workerIndex; }
407 constexpr void setWorkerIndex(u32 index){ _workerIndex = index; }
409 static u32 getCurrentWorkerIndex(void);
410
412 //-------------------------------------------------------------
414 //-------------------------------------------------------------
416
418 GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond = -1){ return _startEvent.waitEvent(milliSecond); }
420 GX_FORCE_INLINE b32 setStartEvent(void){ return _startEvent.setEvent(); }
422 GX_FORCE_INLINE b32 waitCompleteEvent(s32 milliSecond = -1) { return _completeEvent.waitEvent(milliSecond); }
424 GX_FORCE_INLINE b32 setCompleteEvent(void){ return _completeEvent.setEvent(); }
426 GX_FORCE_INLINE void setRequestStop(void){ _requestStopFlag = true; }
428 GX_FORCE_INLINE b32 isRequestStop(void) const { return _requestStopFlag; }
429protected:
431 void createCallback(void) override;
433 void threadMain(void* pArgument) override;
434
436 //-------------------------------------------------------------
438 //-------------------------------------------------------------
440private:
441 static GxWorkerThread* _pMainThread;
442 u32 _workerIndex;
443 GxWorkerThreadManager* _pOwner;
444 GxEvent _startEvent;
445 GxEvent _completeEvent;
446 b32 _requestStopFlag;
447 b32 _initializeLocalStorageFlag;
448
450};
451
452//===========================================================================
454//===========================================================================
456{
457 //-------------------------------------------------------------
459 //-------------------------------------------------------------
461public:
462 GX_RTTI_ABSTRACT_CLASS(GxWorkerThreadManager, GxClassBase)
463 // GxClassBase継承クラス用禁止宣言
465
466 friend class GxWorkerThread;
468 static constexpr u32 WORKER_THREAD_MAX = 3;
470 enum class ARGUMENT_TYPE
471 {
472 NONE,
473 U32,
474 POINTER,
475 };
478 {
485 union
486 {
487 GX_OBJECT_FUNCTION _pFunction;
488 GX_OBJECT_FUNCTION_PARAM _pFunctionParam;
489 GX_OBJECT_FUNCTION_POINTER _pFunctionPtr;
490 };
491 };
493 static constexpr s32 INVALID_HANDLE = -1;
494
496 //-------------------------------------------------------------
498 //-------------------------------------------------------------
500
502 GxWorkerThreadManager(void) : _numThread(0), _maxThread(0), _maxJob(0){ GX_MEMSET(_pThread, 0, sizeof(GxWorkerThread*) * GxThread::HARDWARE_THREAD_MAX); }
504#if GX_DEVELOP
505 virtual void initialize(GxThread::PRIORITY priority, s32 maxJob, GX_CSTR name = "GxWorkerThread", u32 stackSize = GX_WORKER_THREAD_STACKSIZE);
506#else //GX_DEVELOP
507 virtual void initialize(GxThread::PRIORITY priority, s32 maxJob, u32 stackSize = GX_WORKER_THREAD_STACKSIZE);
508#endif // !GX_DEVELOP
510 virtual void terminate(void);
511protected:
513 virtual void initializeThreadLocalStorage(void) = 0;
514
516 //-------------------------------------------------------------
518 //-------------------------------------------------------------
520public:
522 virtual u32 getMaxThread(void){ return _maxThread; }
524 virtual u32 getNumThread(void){ return _numThread; }
526 virtual s32 getNumMaxJob(void){ return _maxJob; }
527
529 //-------------------------------------------------------------
531 //-------------------------------------------------------------
533
535 virtual s32 addJob(GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION pFunction) = 0;
537 virtual s32 addJob(GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION_PARAM pFunction, u32 argument, ARGUMENT_TYPE argumentType = ARGUMENT_TYPE::U32) = 0;
539 virtual s32 addJob(GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION_POINTER pFunction, void* pArgument) = 0;
541 virtual void startJob(void) = 0;
542#if GX_DEVELOP
544 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
545#endif // GX_DEVELOP
546
547protected:
549 virtual void executeJob(GxThread* pWorkerThread) = 0;
551 virtual b32 isComplete(void) = 0;
552
554 //-------------------------------------------------------------
556 //-------------------------------------------------------------
558protected:
559 GxWorkerThread* _pThread[GxThread::HARDWARE_THREAD_MAX];
563
565};
566
567//===========================================================================
569//===========================================================================
571{
572 //-------------------------------------------------------------
574 //-------------------------------------------------------------
576public:
578 // GxClassBase継承クラス用禁止宣言
580
581 friend class GxWorkerThread;
582
584 //-------------------------------------------------------------
586 //-------------------------------------------------------------
588
592 GxSequentialThreadManager(b32 useMainThreadFlag) : _pJobInformation(nullptr), _executeJobIndex(0), _useMainThreadFlag(useMainThreadFlag), _executeJobFlag(false), _numJob(0){}
594 ~GxSequentialThreadManager(void) override;
596#if GX_DEVELOP
597 void initialize(GxThread::PRIORITY priority, s32 maxJob, GX_CSTR name = "GxSequentialThread", u32 stackSize = GX_WORKER_THREAD_STACKSIZE) override;
598#else //GX_DEVELOP
599 void initialize(GxThread::PRIORITY priority, s32 maxJob, u32 stackSize = GX_WORKER_THREAD_STACKSIZE) override;
600#endif // !GX_DEVELOP
601protected:
603 void initializeThreadLocalStorage(void) override {}
604
606 //-------------------------------------------------------------
608 //-------------------------------------------------------------
610public:
612 GX_FORCE_INLINE u32 getMaxThread(void) override { return _maxThread + _useMainThreadFlag; }
614 GX_FORCE_INLINE u32 getNumThread(void) override { return _numThread + _useMainThreadFlag; }
616 GX_FORCE_INLINE u32 getNumWorkerThread(void) { return Super::getNumThread(); }
618 GX_FORCE_INLINE void setNumWorkerThread(u32 num){ GX_ASSERT(!isExecuteJob(), "change num thread error!"); _numThread = num; }
620 GX_FORCE_INLINE b32 isExecuteJob(void) const { return _executeJobFlag; }
621
623 //-------------------------------------------------------------
625 //-------------------------------------------------------------
627
629 s32 addJob(GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION pFunction) override;
631 s32 addJob(GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION_PARAM pFunction, u32 argument, ARGUMENT_TYPE argumentType = ARGUMENT_TYPE::U32) override;
633 s32 addJob(GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION_POINTER pFunction, void* pArgument) override;
635 void startJob(void) override;
636
637protected:
639 void executeJob(GxThread* pThread) override;
641 virtual void startWorkerThreadAll(void);
643 GX_FORCE_INLINE b32 isComplete(void) override { return _executeJobIndex >= _numJob ? true : false; }
644
646 //-------------------------------------------------------------
648 //-------------------------------------------------------------
650protected:
656
658};
659
660GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
void GxTypedObject
その他
Definition GxDefine.h:213
オブジェクト基底クラス
Definition GxBase.h:88
基底クラス
Definition GxBase.h:51
クリティカルセクションクラス
Definition GxThread.h:20
void lock(void)
ロック
Definition GxThread.cpp:139
GX_FORCE_INLINE GxNativeMutex * getMutex(void)
ミューテックスを取得
Definition GxThread.h:53
GX_FORCE_INLINE b32 isLocked(void) const
ロック状態を取得する(状態の確認のみ)
Definition GxThread.h:44
void unlock(void)
アンロック
Definition GxThread.cpp:154
イベントクラス
Definition GxThread.h:132
b32 setEvent(void)
イベントを設定
Definition GxThread.cpp:268
GxEvent(void)
コンストラクタ
Definition GxThread.cpp:227
b32 waitEvent(s32 milliSecond=-1)
イベント待機
Definition GxThread.cpp:291
virtual ~GxEvent(void)
デストラクタ
Definition GxThread.cpp:250
インターロッククラス
Definition GxThread.h:103
virtual ~GxInterlock(void)
デストラクタ
Definition GxThread.h:112
GxInterlock(void)
コンストラクタ
Definition GxThread.h:110
static s32 decrement(volatile s32 *pValue)
数値のデクリメント
Definition GxThread.cpp:210
static s32 increment(volatile s32 *pValue)
数値のインクリメント
Definition GxThread.cpp:194
算術演算クラス
Definition GxMath.h:84
static constexpr u32 VALUE_32
32
Definition GxMath.h:124
プロパティクラス
Definition GxProperty.h:48
乱数クラス
Definition GxRandom.h:20
実行時型情報クラス
Definition GxRtti.h:154
スコープ内クリティカルセクションクラス
Definition GxThread.h:71
GxScopeCriticalSection(GxCriticalSection *pCriticalSection)
コンストラクタ
Definition GxThread.h:78
virtual ~GxScopeCriticalSection(void)
デストラクタ
Definition GxThread.h:80
同期実行ワーカースレッド管理クラス
Definition GxThread.h:571
GxSequentialThreadManager(void)
デフォルトコンストラクタ
Definition GxThread.h:590
b32 _executeJobFlag
ジョブ実行中フラグ
Definition GxThread.h:654
void initialize(GxThread::PRIORITY priority, s32 maxJob, u32 stackSize=GX_WORKER_THREAD_STACKSIZE) override
初期化
Definition GxThread.cpp:1034
s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION pFunction) override
ジョブ追加
Definition GxThread.cpp:1085
GX_FORCE_INLINE void setNumWorkerThread(u32 num)
スレッド数を設定
Definition GxThread.h:618
~GxSequentialThreadManager(void) override
デストラクタ
Definition GxThread.cpp:1020
b32 _useMainThreadFlag
メインスレッドを使用するか
Definition GxThread.h:653
s32 _executeJobIndex
実行しているジョブインデックス
Definition GxThread.h:652
GxSequentialThreadManager(b32 useMainThreadFlag)
コンストラクタ
Definition GxThread.h:592
GX_FORCE_INLINE u32 getMaxThread(void) override
最大スレッド数を取得
Definition GxThread.h:612
GX_FORCE_INLINE b32 isExecuteJob(void) const
ジョブが実行中か判定
Definition GxThread.h:620
GX_FORCE_INLINE u32 getNumWorkerThread(void)
ワーカースレッド数を取得
Definition GxThread.h:616
GX_FORCE_INLINE b32 isComplete(void) override
全てのジョブが完了したか
Definition GxThread.h:643
void startJob(void) override
ジョブ実行開始
Definition GxThread.cpp:1147
void initializeThreadLocalStorage(void) override
TLSの初期化
Definition GxThread.h:603
void executeJob(GxThread *pThread) override
ジョブ実行
Definition GxThread.cpp:1207
s32 _numJob
ジョブ数
Definition GxThread.h:655
virtual void startWorkerThreadAll(void)
ワーカースレッド実行開始
Definition GxThread.cpp:1195
GX_FORCE_INLINE u32 getNumThread(void) override
スレッド数を取得
Definition GxThread.h:614
GxJobInformation * _pJobInformation
ジョブ情報
Definition GxThread.h:651
スレッドクラス
Definition GxThread.h:177
static b32 casPointer(volatile void **ppTarget, void *pOld, void *pNew)
ポインタCAS(Compare-And-Swap)
Definition GxThread.cpp:46
~GxThread(void) override
デストラクタ
Definition GxThread.cpp:453
static b32 casU32(volatile u32 *pTarget, u32 oldValue, u32 newValue)
符号なし32bit整数CAS(Compare-And-Swap)
Definition GxThread.cpp:24
static constexpr u32 INVALID_INDEX
無効スレッドインデックス
Definition GxThread.h:190
void stop(void)
停止(スレッド外からの呼び出し禁止)
Definition GxThread.cpp:760
static GxThread * getCurrentThread(void)
カレントスレッドを取得
Definition GxThread.cpp:505
virtual void createCallback(void)
作成時のコールバック関数
Definition GxThread.h:298
b32 create(void *pIn, PRIORITY priority, u32 stackSize, s32 cpuIndex=-1)
作成
Definition GxThread.cpp:532
static void sleep(u32 milliSecond)
スリープ
Definition GxThread.cpp:690
constexpr u32 getIndex(void) const
インデックスを取得
Definition GxThread.h:251
static void atomicExchangeU32(volatile u32 *pTarget, u32 newValue)
アトミックU32
Definition GxThread.cpp:78
static constexpr u32 MAIN_THREAD_INDEX
メインスレッドインデックス
Definition GxThread.h:192
virtual void threadMain(void *pArgument)=0
メインループ
static void barrierMemory(void)
メモリバリア
Definition GxThread.cpp:64
static constexpr u32 THREAD_MAX
スレッドの最大数
Definition GxThread.h:188
PRIORITY
優先度
Definition GxThread.h:199
@ LOW
最低優先
void resume(void)
サスペンドから復帰
Definition GxThread.cpp:672
static GX_FORCE_INLINE b32 isFixThread(void)
スレッドのCPUを固定するか判定
Definition GxThread.h:267
GxNativeThread _threadId
スレッドID
Definition GxThread.h:332
static GxThread * _pThread[THREAD_MAX]
スレッド自身のポインタ
Definition GxThread.h:412
GxThread(void)
コンストラクタ
Definition GxThread.cpp:421
static u32 _num
作ったスレッド数
Definition GxThread.h:331
ワーカースレッドクラス
Definition GxThread.h:369
GX_FORCE_INLINE b32 waitCompleteEvent(s32 milliSecond=-1)
完了イベント待ち
Definition GxThread.h:422
GX_FORCE_INLINE b32 setCompleteEvent(void)
完了イベント開始
Definition GxThread.h:424
GX_FORCE_INLINE b32 setStartEvent(void)
開始イベント開始
Definition GxThread.h:420
constexpr u32 getWorkerIndex(void) const
ワーカースレッド用インデックスを取得
Definition GxThread.h:405
constexpr void setWorkerIndex(u32 index)
ワーカースレッド用インデックスを設定
Definition GxThread.h:407
constexpr void setOwner(GxWorkerThreadManager *pOwner)
管理者を設定
Definition GxThread.h:403
constexpr GxWorkerThreadManager * getOwner(void) const
管理者を取得
Definition GxThread.h:401
static void initializeMainThread(void)
メインスレッドの初期化
Definition GxThread.cpp:798
GX_FORCE_INLINE void setRequestStop(void)
停止リクエスト設定
Definition GxThread.h:426
GX_FORCE_INLINE b32 isRequestStop(void) const
停止リクエストチェック
Definition GxThread.h:428
GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond=-1)
開始イベント待ち
Definition GxThread.h:418
static u32 getCurrentWorkerIndex(void)
カレントのワーカースレッド用インデックスを取得
Definition GxThread.cpp:850
static void terminateMainThread(void)
メインスレッドの終了
Definition GxThread.cpp:823
void initializeThreadLocalStorage(void)
TLSの初期化
Definition GxThread.cpp:837
void createCallback(void) override
作成時のコールバック関数
Definition GxThread.cpp:860
void threadMain(void *pArgument) override
メインループ
Definition GxThread.cpp:869
ワーカースレッド管理クラス
Definition GxThread.h:456
virtual u32 getNumThread(void)
スレッド数を取得
Definition GxThread.h:524
GxWorkerThread * _pThread[GxThread::HARDWARE_THREAD_MAX]
スレッド
Definition GxThread.h:559
virtual void initialize(GxThread::PRIORITY priority, s32 maxJob, u32 stackSize=GX_WORKER_THREAD_STACKSIZE)
初期化
Definition GxThread.cpp:914
s32 _maxJob
最大ジョブ数
Definition GxThread.h:562
virtual u32 getMaxThread(void)
最大スレッド数を取得
Definition GxThread.h:522
static constexpr u32 WORKER_THREAD_MAX
ハードウェアスレッド最大数-1(1個は描画スレッドに使う)
Definition GxThread.h:468
virtual b32 isComplete(void)=0
全てのジョブが完了したか
ARGUMENT_TYPE
引数の種別
Definition GxThread.h:471
u32 _numThread
スレッド数
Definition GxThread.h:560
virtual void executeJob(GxThread *pWorkerThread)=0
ジョブ実行
static constexpr s32 INVALID_HANDLE
無効なハンドル
Definition GxThread.h:493
GxWorkerThreadManager(void)
コンストラクタ
Definition GxThread.h:502
virtual void initializeThreadLocalStorage(void)=0
TLSの初期化
virtual s32 getNumMaxJob(void)
最大ジョブ数を取得
Definition GxThread.h:526
u32 _maxThread
動的な最大スレッド数
Definition GxThread.h:561
virtual void startJob(void)=0
ジョブ実行開始
virtual s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION_PARAM pFunction, u32 argument, ARGUMENT_TYPE argumentType=ARGUMENT_TYPE::U32)=0
ジョブ追加
virtual s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION_POINTER pFunction, void *pArgument)=0
ジョブ追加
virtual s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION pFunction)=0
ジョブ追加
ビット指定型フラグ
Definition GxStruct.h:1338
ジョブ情報
Definition GxThread.h:478
GX_OBJECT_FUNCTION_POINTER _pFunctionPtr
ポインタ付き実行関数
Definition GxThread.h:489
GxClassBaseRoot * _pObject
オブジェクト
Definition GxThread.h:481
ARGUMENT_TYPE _argumentType
引数種別
Definition GxThread.h:482
void * _pArgument
引数(ポインタ)
Definition GxThread.h:484
s32 _handle
ハンドル
Definition GxThread.h:479
GX_OBJECT_FUNCTION _pFunction
実行関数
Definition GxThread.h:487
GX_OBJECT_FUNCTION_PARAM _pFunctionParam
パラメータ付き実行関数
Definition GxThread.h:488
b32 _executeFlag
実行中フラグ
Definition GxThread.h:480
u32 _argument
引数(数値)
Definition GxThread.h:483
32bitブーリアン
Definition GxDefine.h:173