mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 03:33:48 +00:00
Update thread.cpp
fix linux thread tests.
This commit is contained in:
parent
7c37b38f03
commit
2e91837f6a
1 changed files with 24 additions and 16 deletions
|
|
@ -23,6 +23,7 @@
|
|||
#include "platform/threads/thread.h"
|
||||
#include "platform/threads/semaphore.h"
|
||||
#include "platform/threads/mutex.h"
|
||||
#include "platform/platformIntrinsics.h"
|
||||
#include <stdlib.h>
|
||||
#include <SDL.h>
|
||||
#include <SDL_thread.h>
|
||||
|
|
@ -30,13 +31,23 @@
|
|||
class PlatformThreadData
|
||||
{
|
||||
public:
|
||||
ThreadRunFunction mRunFunc = NULL;
|
||||
void* mRunArg = NULL;
|
||||
Thread* mThread = NULL;
|
||||
Semaphore mGateway; // default count is 1
|
||||
SDL_threadID mThreadID = 0;
|
||||
SDL_Thread* mSdlThread = NULL;
|
||||
bool mDead = true;
|
||||
ThreadRunFunction mRunFunc;
|
||||
void* mRunArg;
|
||||
Thread* mThread;
|
||||
Semaphore mGateway;
|
||||
SDL_threadID mThreadID;
|
||||
SDL_Thread* mSdlThread;
|
||||
U32 mDead;
|
||||
|
||||
PlatformThreadData()
|
||||
{
|
||||
mRunFunc = NULL;
|
||||
mRunArg = 0;
|
||||
mThread = 0;
|
||||
mThreadID = 0;
|
||||
mSdlThread = NULL;
|
||||
mDead = false;
|
||||
}
|
||||
};
|
||||
|
||||
ThreadManager::MainThreadId ThreadManager::smMainThreadId;
|
||||
|
|
@ -50,22 +61,19 @@ ThreadManager::MainThreadId ThreadManager::smMainThreadId;
|
|||
static int ThreadRunHandler(void * arg)
|
||||
{
|
||||
PlatformThreadData *mData = reinterpret_cast<PlatformThreadData*>(arg);
|
||||
Thread *thread = mData->mThread;
|
||||
|
||||
mData->mThreadID = SDL_ThreadID();
|
||||
|
||||
ThreadManager::addThread(thread);
|
||||
thread->run(mData->mRunArg);
|
||||
ThreadManager::removeThread(thread);
|
||||
ThreadManager::addThread(mData->mThread);
|
||||
mData->mThread->run(mData->mRunArg);
|
||||
ThreadManager::removeThread(mData->mThread);
|
||||
|
||||
bool autoDelete = thread->autoDelete;
|
||||
bool autoDelete = mData->mThread->autoDelete;
|
||||
|
||||
mData->mThreadID = 0;
|
||||
mData->mDead = true;
|
||||
dCompareAndSwap(mData->mDead, false, true);
|
||||
mData->mGateway.release();
|
||||
|
||||
if( autoDelete )
|
||||
delete thread;
|
||||
delete mData->mThread;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue