107 lines
2.0 KiB
C++
107 lines
2.0 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.
|
|
*
|
|
*/
|
|
|
|
#ifndef __RAK_THREAD_H
|
|
#define __RAK_THREAD_H
|
|
|
|
#if defined(_WIN32_WCE)
|
|
#include "WindowsIncludes.hpp"
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#include "Export.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(WINDOWS_PHONE_8) || defined(WINDOWS_STORE_RT)
|
|
#include "../DependentExtensions/WinPhone8/ThreadEmulation.hpp"
|
|
using namespace ThreadEmulation;
|
|
#endif
|
|
|
|
namespace RakNet
|
|
{
|
|
/// To define a thread, use RAK_THREAD_DECLARATION(functionName);
|
|
#if defined(_WIN32_WCE) || defined(WINDOWS_PHONE_8) || defined(WINDOWS_STORE_RT)
|
|
#define RAK_THREAD_DECLARATION(functionName) DWORD WINAPI functionName(LPVOID arguments)
|
|
|
|
|
|
#elif defined(_WIN32)
|
|
#define RAK_THREAD_DECLARATION(functionName) unsigned __stdcall functionName( void* arguments )
|
|
|
|
|
|
#else
|
|
#define RAK_THREAD_DECLARATION(functionName) void* functionName( void* arguments )
|
|
#endif
|
|
|
|
class RAK_DLL_EXPORT RakThread
|
|
{
|
|
public:
|
|
|
|
|
|
|
|
|
|
/// Create a thread, simplified to be cross platform without all the extra junk
|
|
/// To then start that thread, call RakCreateThread(functionName, arguments);
|
|
/// \param[in] start_address Function you want to call
|
|
/// \param[in] arglist Arguments to pass to the function
|
|
/// \return 0=success. >0 = error code
|
|
|
|
/*
|
|
nice value Win32 Priority
|
|
-20 to -16 THREAD_PRIORITY_HIGHEST
|
|
-15 to -6 THREAD_PRIORITY_ABOVE_NORMAL
|
|
-5 to +4 THREAD_PRIORITY_NORMAL
|
|
+5 to +14 THREAD_PRIORITY_BELOW_NORMAL
|
|
+15 to +19 THREAD_PRIORITY_LOWEST
|
|
*/
|
|
#if defined(_WIN32_WCE) || defined(WINDOWS_PHONE_8) || defined(WINDOWS_STORE_RT)
|
|
static int Create( LPTHREAD_START_ROUTINE start_address, void *arglist, int priority=0);
|
|
|
|
|
|
#elif defined(_WIN32)
|
|
static int Create( unsigned __stdcall start_address( void* ), void *arglist, int priority=0);
|
|
|
|
|
|
|
|
#else
|
|
static int Create( void* start_address( void* ), void *arglist, int priority=0);
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|