summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/threading/thread.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-30 11:59:35 +0800
committerchai <chaifix@163.com>2019-03-30 11:59:35 +0800
commitc270d033fa04873ee7a8925dbb00cae5edc4555c (patch)
treeee27a45c5b946b08dd7a726a925028f6ca3eabf1 /source/modules/asura-utils/threading/thread.cpp
parent771df5c31cd5653467fd6e76c1a3e002ca39582c (diff)
*misc
Diffstat (limited to 'source/modules/asura-utils/threading/thread.cpp')
-rw-r--r--source/modules/asura-utils/threading/thread.cpp43
1 files changed, 28 insertions, 15 deletions
diff --git a/source/modules/asura-utils/threading/thread.cpp b/source/modules/asura-utils/threading/thread.cpp
index 0f4f5da..fc397d2 100644
--- a/source/modules/asura-utils/threading/thread.cpp
+++ b/source/modules/asura-utils/threading/thread.cpp
@@ -41,8 +41,10 @@ namespace AsuraEngine
bool Thread::AddTask(Task* task)
{
- lock(mTaskQueueMutex);
- mTaskQueue.push(task);
+ lock(mTaskQueueMutex)
+ {
+ mTaskQueue.push(task);
+ }
return true;
}
@@ -96,25 +98,31 @@ namespace AsuraEngine
{
ASSERT(mImpl);
- lock(mStateMutex);
- mState = THREAD_STATE_PAUSED;
+ lock(mStateMutex)
+ {
+ mState = THREAD_STATE_PAUSED;
+ }
}
void Thread::Resume()
{
ASSERT(mImpl);
- lock(mStateMutex);
- if(mState == THREAD_STATE_PAUSED)
- mState = THREAD_STATE_RUNNING;
+ lock(mStateMutex)
+ {
+ if (mState == THREAD_STATE_PAUSED)
+ mState = THREAD_STATE_RUNNING;
+ }
}
void Thread::Stop()
{
ASSERT(mImpl);
- lock(mStateMutex);
- mState = THREAD_STATE_STOPPED;
+ lock(mStateMutex)
+ {
+ mState = THREAD_STATE_STOPPED;
+ }
}
void Thread::PauseSync()
@@ -144,9 +152,10 @@ namespace AsuraEngine
ThreadState Thread::GetState()
{
ThreadState state;
- mStateMutex.Lock();
- state = mState;
- mStateMutex.Unlock();
+ lock(mStateMutex)
+ {
+ state = mState;
+ }
return state;
}
@@ -183,7 +192,7 @@ namespace AsuraEngine
return mName;
}
- void Thread::Process()
+ int Thread::Process()
{
LUAX_STATE(mLuaThread);
@@ -203,6 +212,7 @@ namespace AsuraEngine
}
else if (mType == THREAD_TYPE_IMMEDIATE)
{
+ // unsafe
task->Invoke(mCallbackThread);
this->LuaxRelease<Task>(state, task);
}
@@ -230,14 +240,17 @@ namespace AsuraEngine
// ״̬ΪIdle
Idle();
+
+ return 0;
}
///
/// ӳģʽص
///
- void Thread::Post()
+ void Thread::Dispatch()
{
- ASSERT(mType == THREAD_TYPE_DEFERRED);
+ if (mType != THREAD_TYPE_DEFERRED)
+ return;
LUAX_STATE(mLuaThread);
while (!mFinishedTasks.empty())