|
|
@@ -31,8 +31,9 @@ namespace bx
|
|
|
|
|
|
public:
|
|
|
Thread()
|
|
|
-#if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360|BX_PLATFORM_WINRT
|
|
|
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
|
|
|
: m_handle(INVALID_HANDLE_VALUE)
|
|
|
+ , m_threadId(UINT32_MAX)
|
|
|
#elif BX_PLATFORM_POSIX
|
|
|
: m_handle(0)
|
|
|
#endif // BX_PLATFORM_
|
|
|
@@ -61,7 +62,7 @@ namespace bx
|
|
|
m_stackSize = _stackSize;
|
|
|
m_running = true;
|
|
|
|
|
|
-#if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360
|
|
|
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360
|
|
|
m_handle = CreateThread(NULL
|
|
|
, m_stackSize
|
|
|
, threadFunc
|
|
|
@@ -101,17 +102,18 @@ namespace bx
|
|
|
BX_CHECK(0 == result, "pthread_attr_setschedparam failed! %d", result);
|
|
|
#endif // BX_PLATFORM_
|
|
|
|
|
|
+ m_sem.wait();
|
|
|
+
|
|
|
if (NULL != _name)
|
|
|
{
|
|
|
setThreadName(_name);
|
|
|
}
|
|
|
- m_sem.wait();
|
|
|
}
|
|
|
|
|
|
void shutdown()
|
|
|
{
|
|
|
BX_CHECK(m_running, "Not running!");
|
|
|
-#if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360
|
|
|
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360
|
|
|
WaitForSingleObject(m_handle, INFINITE);
|
|
|
GetExitCodeThread(m_handle, (DWORD*)&m_exitCode);
|
|
|
CloseHandle(m_handle);
|
|
|
@@ -162,7 +164,7 @@ namespace bx
|
|
|
ThreadName tn;
|
|
|
tn.type = 0x1000;
|
|
|
tn.name = _name;
|
|
|
- tn.id = GetThreadId(m_handle);
|
|
|
+ tn.id = m_threadId;
|
|
|
tn.flags = 0;
|
|
|
|
|
|
__try
|
|
|
@@ -184,11 +186,15 @@ namespace bx
|
|
|
private:
|
|
|
int32_t entry()
|
|
|
{
|
|
|
+#if BX_PLATFORM_WINDOWS
|
|
|
+ m_threadId = ::GetCurrentThreadId();
|
|
|
+#endif // BX_PLATFORM_WINDOWS
|
|
|
+
|
|
|
m_sem.post();
|
|
|
return m_fn(m_userData);
|
|
|
}
|
|
|
|
|
|
-#if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360|BX_PLATFORM_WINRT
|
|
|
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
|
|
|
static DWORD WINAPI threadFunc(LPVOID _arg)
|
|
|
{
|
|
|
Thread* thread = (Thread*)_arg;
|
|
|
@@ -209,18 +215,19 @@ namespace bx
|
|
|
}
|
|
|
#endif // BX_PLATFORM_
|
|
|
|
|
|
-#if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360|BX_PLATFORM_WINRT
|
|
|
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
|
|
|
HANDLE m_handle;
|
|
|
+ DWORD m_threadId;
|
|
|
#elif BX_PLATFORM_POSIX
|
|
|
pthread_t m_handle;
|
|
|
#endif // BX_PLATFORM_
|
|
|
|
|
|
- ThreadFn m_fn;
|
|
|
- void* m_userData;
|
|
|
+ ThreadFn m_fn;
|
|
|
+ void* m_userData;
|
|
|
Semaphore m_sem;
|
|
|
- uint32_t m_stackSize;
|
|
|
- int32_t m_exitCode;
|
|
|
- bool m_running;
|
|
|
+ uint32_t m_stackSize;
|
|
|
+ int32_t m_exitCode;
|
|
|
+ bool m_running;
|
|
|
};
|
|
|
|
|
|
#if BX_PLATFORM_WINDOWS
|