2022-07-08 00:55:01 +02:00
|
|
|
|
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
|
|
|
|
|
//
|
2022-09-09 19:47:31 +02:00
|
|
|
|
// Purpose: Thread tools
|
2022-07-08 00:55:01 +02:00
|
|
|
|
//
|
|
|
|
|
// $Workfile: $
|
|
|
|
|
// $NoKeywords: $
|
|
|
|
|
//===========================================================================//
|
|
|
|
|
|
|
|
|
|
#include "core/stdafx.h"
|
|
|
|
|
#include "threadtools.h"
|
|
|
|
|
|
|
|
|
|
LONG ThreadInterlockedCompareExchange64(LONG volatile* pDest, int64 value, int64 comperand)
|
|
|
|
|
{
|
|
|
|
|
return _InterlockedCompareExchange(pDest, comperand, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ThreadInterlockedAssignIf(LONG volatile* p, int32 value, int32 comperand)
|
|
|
|
|
{
|
|
|
|
|
Assert((size_t)p % 4 == 0);
|
|
|
|
|
return _InterlockedCompareExchange(p, comperand, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int64 ThreadInterlockedCompareExchange64(int64 volatile* pDest, int64 value, int64 comperand)
|
|
|
|
|
{
|
|
|
|
|
return _InterlockedCompareExchange64(pDest, comperand, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ThreadInterlockedAssignIf64(int64 volatile* pDest, int64 value, int64 comperand)
|
|
|
|
|
{
|
|
|
|
|
return _InterlockedCompareExchange64(pDest, comperand, value);
|
2022-08-18 12:00:01 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ThreadInMainThread()
|
|
|
|
|
{
|
|
|
|
|
return (ThreadGetCurrentId() == (*g_ThreadMainThreadID));
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-21 19:35:06 +02:00
|
|
|
|
bool ThreadInRenderThread()
|
|
|
|
|
{
|
|
|
|
|
return (ThreadGetCurrentId() == g_ThreadRenderThreadID);
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-18 19:01:37 +02:00
|
|
|
|
bool ThreadInServerFrameThread()
|
|
|
|
|
{
|
|
|
|
|
return (ThreadGetCurrentId() == (*g_ThreadServerFrameThreadID));
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 12:00:01 +02:00
|
|
|
|
ThreadId_t ThreadGetCurrentId()
|
|
|
|
|
{
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
return GetCurrentThreadId();
|
|
|
|
|
#elif defined( _PS3 )
|
|
|
|
|
sys_ppu_thread_t th = 0;
|
|
|
|
|
sys_ppu_thread_get_id(&th);
|
|
|
|
|
return th;
|
|
|
|
|
#elif defined(POSIX)
|
|
|
|
|
return (ThreadId_t)pthread_self();
|
|
|
|
|
#else
|
|
|
|
|
Assert(0);
|
|
|
|
|
DebuggerBreak();
|
|
|
|
|
return 0;
|
|
|
|
|
#endif
|
2022-07-08 00:55:01 +02:00
|
|
|
|
}
|