2020-09-09 00:45:46 -05:00
|
|
|
#ifndef STORM_THREAD_S__THREAD_HPP
|
|
|
|
|
#define STORM_THREAD_S__THREAD_HPP
|
|
|
|
|
|
2020-11-01 17:45:45 -06:00
|
|
|
#include "storm/thread/SThread.hpp"
|
2020-09-09 00:45:46 -05:00
|
|
|
#include <cstdint>
|
2022-12-29 14:46:59 -06:00
|
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
|
|
|
#include <windows.h>
|
|
|
|
|
#endif
|
2020-09-09 00:45:46 -05:00
|
|
|
|
|
|
|
|
typedef SThread SyncObjectData;
|
|
|
|
|
|
|
|
|
|
struct SThreadParmBlock {
|
|
|
|
|
uint32_t (*threadProc)(void*);
|
|
|
|
|
void* threadParam;
|
|
|
|
|
uint32_t threadID;
|
2022-12-29 14:46:59 -06:00
|
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
|
|
|
HANDLE threadH;
|
|
|
|
|
#endif
|
|
|
|
|
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
|
2020-09-09 00:45:46 -05:00
|
|
|
SyncObjectData* syncObject;
|
2022-12-29 14:46:59 -06:00
|
|
|
#endif
|
2020-09-09 00:45:46 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class S_Thread {
|
|
|
|
|
public:
|
|
|
|
|
// Types
|
|
|
|
|
struct SThreadTrack {
|
|
|
|
|
int32_t suspended;
|
|
|
|
|
int32_t live;
|
|
|
|
|
uint32_t threadId;
|
2022-12-29 14:46:59 -06:00
|
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
|
|
|
HANDLE threadH;
|
|
|
|
|
#endif
|
2020-09-09 00:45:46 -05:00
|
|
|
char name[16];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Static variables
|
|
|
|
|
static int32_t s_numthreads;
|
|
|
|
|
static int32_t s_maxthreads;
|
|
|
|
|
static uint32_t s_threadID;
|
|
|
|
|
static SThreadTrack s_threads[1024];
|
|
|
|
|
|
|
|
|
|
// Static functions
|
2022-12-28 21:07:31 -06:00
|
|
|
#if defined(WHOA_SYSTEM_WIN)
|
2024-11-14 21:59:05 -08:00
|
|
|
static DWORD WINAPI s_SLaunchThread(void* threadParam);
|
2022-12-28 21:07:31 -06:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(WHOA_SYSTEM_MAC)
|
|
|
|
|
static uint32_t s_SLaunchThread(void* threadParam);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(WHOA_SYSTEM_LINUX)
|
|
|
|
|
static void* s_SLaunchThread(void* threadParam);
|
|
|
|
|
#endif
|
2020-09-09 00:45:46 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|