LearnWithTouch/App/LearnWithTouch_ios/Libraries/libil2cpp/include/os/Win32/ThreadImpl.h
2019-07-01 14:33:21 +02:00

77 lines
2.1 KiB
C++

#pragma once
#if !IL2CPP_THREADS_STD && IL2CPP_THREADS_WIN32
#include "os/ErrorCodes.h"
#include "os/Thread.h"
#include "os/WaitStatus.h"
#include "utils/NonCopyable.h"
#include "WindowsHeaders.h"
#define IL2CPP_DEFAULT_STACK_SIZE ( 1 * 1024 * 1024) // default .NET stacksize is 1mb
namespace il2cpp
{
namespace os
{
class ThreadImpl : public il2cpp::utils::NonCopyable
{
public:
ThreadImpl();
~ThreadImpl();
uint64_t Id();
ErrorCode Run(Thread::StartFunc func, void* arg);
void SetName(const std::string& name);
void SetPriority(ThreadPriority priority);
ThreadPriority GetPriority();
void SetStackSize(size_t newsize)
{
// only makes sense if it's called BEFORE the thread has been created
IL2CPP_ASSERT(m_ThreadHandle == NULL);
// if newsize is zero we use the per-platform default value for size of stack
if (newsize == 0)
{
newsize = IL2CPP_DEFAULT_STACK_SIZE;
}
m_StackSize = newsize;
}
static int GetMaxStackSize();
void QueueUserAPC(Thread::APCFunc func, void* context);
ApartmentState GetApartment();
ApartmentState GetExplicitApartment();
ApartmentState SetApartment(ApartmentState state);
void SetExplicitApartment(ApartmentState state);
static void Sleep(uint32_t ms, bool interruptible);
static uint64_t CurrentThreadId();
static ThreadImpl* CreateForCurrentThread();
#if NET_4_0
static bool YieldInternal();
#endif
#if IL2CPP_HAS_NATIVE_THREAD_CLEANUP
static void SetNativeThreadCleanup(Thread::ThreadCleanupFunc cleanupFunction);
static void RegisterCurrentThreadForCleanup(void* arg);
static void UnregisterCurrentThreadForCleanup();
static void OnCurrentThreadExiting();
#endif
private:
HANDLE m_ThreadHandle;
volatile DWORD m_ThreadId;
SIZE_T m_StackSize;
ApartmentState m_ApartmentState;
ThreadPriority m_Priority;
};
}
}
#endif