12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "il2cpp-config.h"
- #if IL2CPP_THREADS_STD
- #include "os/Thread.h"
- #include "ThreadImpl.h"
- #include <thread>
- namespace il2cpp
- {
- namespace os
- {
- struct StartData
- {
- Thread::StartFunc m_StartFunc;
- void* m_StartArg;
- };
- static void ThreadStartWrapper(void* arg)
- {
- StartData* startData = (StartData*)arg;
- startData->m_StartFunc(startData->m_StartArg);
- free(startData);
- }
- uint64_t ThreadImpl::Id()
- {
- return m_Thread.get_id().hash();
- }
- ErrorCode ThreadImpl::Run(Thread::StartFunc func, void* arg, int64_t affinityMask)
- {
- StartData* startData = (StartData*)malloc(sizeof(StartData));
- startData->m_StartFunc = func;
- startData->m_StartArg = arg;
- std::thread t(ThreadStartWrapper, startData);
- if (affinityMask != Thread::kThreadAffinityAll)
- {
- IL2CPP_ASSERT(0 && "Using non-default thread affinity is not supported on the STD implementation.");
- }
- m_Thread.swap(t);
- return kErrorCodeSuccess;
- }
- WaitStatus ThreadImpl::Join(uint32_t ms)
- {
- m_Thread.join();
- return kWaitStatusSuccess;
- }
- ErrorCode ThreadImpl::Sleep(uint32_t milliseconds)
- {
- std::chrono::milliseconds dura(milliseconds);
- std::this_thread::sleep_for(dura);
- return kErrorCodeSuccess;
- }
- uint64_t ThreadImpl::CurrentThreadId()
- {
- return std::this_thread::get_id().hash();
- }
- }
- }
- #endif
|