mirror of
https://github.com/celisej567/mcpe.git
synced 2025-12-31 17:49:17 +03:00
179 lines
2.3 KiB
C++
179 lines
2.3 KiB
C++
/*
|
|
* Copyright (c) 2014, Oculus VR, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
*/
|
|
|
|
#include "RakThread.h"
|
|
#include "RakAssert.h"
|
|
#include "RakNetDefines.h"
|
|
#include "RakSleep.h"
|
|
#include "RakMemoryOverride.h"
|
|
|
|
using namespace RakNet;
|
|
|
|
|
|
|
|
|
|
#if defined(_WIN32)
|
|
#include "WindowsIncludes.h"
|
|
#include <stdio.h>
|
|
#if !defined(_WIN32_WCE)
|
|
#include <process.h>
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#else
|
|
#include <pthread.h>
|
|
#endif
|
|
|
|
#if defined(_WIN32_WCE) || defined(WINDOWS_PHONE_8) || defined(WINDOWS_STORE_RT)
|
|
int RakThread::Create( LPTHREAD_START_ROUTINE start_address, void *arglist, int priority)
|
|
#elif defined(_WIN32)
|
|
int RakThread::Create( unsigned __stdcall start_address( void* ), void *arglist, int priority)
|
|
|
|
|
|
|
|
#else
|
|
int RakThread::Create( void* start_address( void* ), void *arglist, int priority)
|
|
#endif
|
|
{
|
|
#ifdef _WIN32
|
|
HANDLE threadHandle;
|
|
unsigned threadID = 0;
|
|
|
|
|
|
#if defined(WINDOWS_PHONE_8) || defined(WINDOWS_STORE_RT)
|
|
threadHandle = CreateThread(NULL,0,start_address,arglist,CREATE_SUSPENDED, 0);
|
|
#elif defined _WIN32_WCE
|
|
threadHandle = CreateThread(NULL,MAX_ALLOCA_STACK_ALLOCATION*2,start_address,arglist,0,(DWORD*)&threadID);
|
|
#else
|
|
threadHandle = (HANDLE) _beginthreadex( NULL, MAX_ALLOCA_STACK_ALLOCATION*2, start_address, arglist, 0, &threadID );
|
|
#endif
|
|
|
|
SetThreadPriority(threadHandle, priority);
|
|
|
|
#if defined(WINDOWS_PHONE_8) || defined(WINDOWS_STORE_RT)
|
|
ResumeThread(threadHandle);
|
|
#endif
|
|
|
|
if (threadHandle==0)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
CloseHandle( threadHandle );
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#else
|
|
pthread_t threadHandle;
|
|
// Create thread linux
|
|
pthread_attr_t attr;
|
|
sched_param param;
|
|
param.sched_priority=priority;
|
|
pthread_attr_init( &attr );
|
|
pthread_attr_setschedparam(&attr, ¶m);
|
|
|
|
|
|
|
|
|
|
|
|
pthread_attr_setstacksize(&attr, MAX_ALLOCA_STACK_ALLOCATION*2);
|
|
|
|
pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
|
|
int res = pthread_create( &threadHandle, &attr, start_address, arglist );
|
|
RakAssert(res==0 && "pthread_create in RakThread.cpp failed.")
|
|
return res;
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|