mirror of
				https://github.com/hedge-dev/UnleashedRecomp.git
				synced 2025-10-30 07:11:05 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <kernel/xdm.h>
 | |
| 
 | |
| // Use pthreads directly on macOS to be able to increase default stack size.
 | |
| #ifdef __APPLE__
 | |
| #define USE_PTHREAD 1
 | |
| #endif
 | |
| 
 | |
| #ifdef USE_PTHREAD
 | |
| #include <pthread.h>
 | |
| #endif
 | |
| 
 | |
| #define CURRENT_THREAD_HANDLE uint32_t(-2)
 | |
| 
 | |
| struct GuestThreadContext
 | |
| {
 | |
|     PPCContext ppcContext{};
 | |
|     uint8_t* thread = nullptr;
 | |
| 
 | |
|     GuestThreadContext(uint32_t cpuNumber);
 | |
|     ~GuestThreadContext();
 | |
| };
 | |
| 
 | |
| struct GuestThreadParams
 | |
| {
 | |
|     uint32_t function;
 | |
|     uint32_t value;
 | |
|     uint32_t flags;
 | |
| };
 | |
| 
 | |
| struct GuestThreadHandle : KernelObject
 | |
| {
 | |
|     GuestThreadParams params;
 | |
|     std::atomic<bool> suspended;
 | |
| #ifdef USE_PTHREAD
 | |
|     pthread_t thread;
 | |
| #else
 | |
|     std::thread thread;
 | |
| #endif
 | |
| 
 | |
|     GuestThreadHandle(const GuestThreadParams& params);
 | |
|     ~GuestThreadHandle() override;
 | |
| 
 | |
|     uint32_t GetThreadId() const;
 | |
| 
 | |
|     uint32_t Wait(uint32_t timeout) override;
 | |
| };
 | |
| 
 | |
| struct GuestThread
 | |
| {
 | |
|     static uint32_t Start(const GuestThreadParams& params);
 | |
|     static GuestThreadHandle* Start(const GuestThreadParams& params, uint32_t* threadId);
 | |
| 
 | |
|     static uint32_t GetCurrentThreadId();
 | |
|     static void SetLastError(uint32_t error);
 | |
| 
 | |
| #ifdef _WIN32
 | |
|     static void SetThreadName(uint32_t threadId, const char* name);
 | |
| #endif
 | |
| };
 | 
