Showing the changes to codec/common/src/WelsThreadPool.cpp (1 of 7 files). Show all
Unified · Split
| @@ -52,6 +52,7 @@ CWelsThreadPool::CWelsThreadPool (IWelsThreadPoolSink* pSink, int32_t iMaxThread · 51 unmodified lines | |||
| 52 | m_pSink (pSink) { | 52 | m_pSink (pSink) { |
| 53 | m_cWaitedTasks = new CWelsCircleQueue<IWelsTask>(); | 53 | m_cWaitedTasks = new CWelsCircleQueue<IWelsTask>(); |
| 54 | m_cIdleThreads = new CWelsCircleQueue<CWelsTaskThread>(); | 54 | m_cIdleThreads = new CWelsCircleQueue<CWelsTaskThread>(); |
| 55 | m_cBusyThreads = new CWelsList<CWelsTaskThread>(); | ||
| 55 | m_iMaxThreadNum = 0; | 56 | m_iMaxThreadNum = 0; |
| 56 | 57 | ||
| 57 | Init (iMaxThreadNum); | 58 | Init (iMaxThreadNum); |
| @@ -63,16 +64,17 @@ CWelsThreadPool::~CWelsThreadPool() { · 5 unmodified lines | |||
| 63 | 64 | ||
| 64 | delete m_cWaitedTasks; | 65 | delete m_cWaitedTasks; |
| 65 | delete m_cIdleThreads; | 66 | delete m_cIdleThreads; |
| 67 | delete m_cBusyThreads; | ||
| 66 | } | 68 | } |
| 67 | 69 | ||
| 68 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) { | 70 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) { |
| 69 | AddThreadToBusyMap (pThread); | 71 | AddThreadToBusyList (pThread); |
| 70 | 72 | ||
| 71 | return WELS_THREAD_ERROR_OK; | 73 | return WELS_THREAD_ERROR_OK; |
| 72 | } | 74 | } |
| 73 | 75 | ||
| 74 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IWelsTask* pTask) { | 76 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IWelsTask* pTask) { |
| 75 | RemoveThreadFromBusyMap (pThread); | 77 | RemoveThreadFromBusyList (pThread); |
| 76 | AddThreadToIdleQueue (pThread); | 78 | AddThreadToIdleQueue (pThread); |
| 77 | 79 | ||
| 78 | if (m_pSink) { | 80 | if (m_pSink) { |
| @@ -198,36 +200,19 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToIdleQueue (CWelsTaskThread* p · 119 unmodified lines | |||
| 198 | return WELS_THREAD_ERROR_OK; | 200 | return WELS_THREAD_ERROR_OK; |
| 199 | } | 201 | } |
| 200 | 202 | ||
| 201 | WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToBusyMap (CWelsTaskThread* pThread) { | 203 | WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToBusyList (CWelsTaskThread* pThread) { |
| 202 | CWelsAutoLock cLock (m_cLockBusyTasks); | 204 | CWelsAutoLock cLock (m_cLockBusyTasks); |
| 203 | 205 | m_cBusyThreads->push_back (pThread); | |
| 204 | uintptr_t id = pThread->GetID(); | ||
| 205 | |||
| 206 | std::map<uintptr_t, CWelsTaskThread*>::iterator iter = m_cBusyThreads.find (id); | ||
| 207 | |||
| 208 | if (iter != m_cBusyThreads.end()) { | ||
| 209 | return WELS_THREAD_ERROR_GENERAL; | ||
| 210 | } | ||
| 211 | |||
| 212 | m_cBusyThreads[id] = pThread; | ||
| 213 | |||
| 214 | return WELS_THREAD_ERROR_OK; | 206 | return WELS_THREAD_ERROR_OK; |
| 215 | } | 207 | } |
| 216 | 208 | ||
| 217 | WELS_THREAD_ERROR_CODE CWelsThreadPool::RemoveThreadFromBusyMap (CWelsTaskThread* pThread) { | 209 | WELS_THREAD_ERROR_CODE CWelsThreadPool::RemoveThreadFromBusyList (CWelsTaskThread* pThread) { |
| 218 | CWelsAutoLock cLock (m_cLockBusyTasks); | 210 | CWelsAutoLock cLock (m_cLockBusyTasks); |
| 219 | 211 | if (m_cBusyThreads->erase(pThread)) { | |
| 220 | uintptr_t id = pThread->GetID(); | 212 | return WELS_THREAD_ERROR_OK; |
| 221 | |||
| 222 | std::map<uintptr_t, CWelsTaskThread*>::iterator iter = m_cBusyThreads.find (id); | ||
| 223 | |||
| 224 | if (iter != m_cBusyThreads.end()) { | ||
| 225 | m_cBusyThreads.erase (iter); | ||
| 226 | } else { | 213 | } else { |
| 227 | return WELS_THREAD_ERROR_GENERAL; | 214 | return WELS_THREAD_ERROR_GENERAL; |
| 228 | } | 215 | } |
| 229 | |||
| 230 | return WELS_THREAD_ERROR_OK; | ||
| 231 | } | 216 | } |
| 232 | 217 | ||
| 233 | void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { | 218 | void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { |
| @@ -250,7 +235,7 @@ CWelsTaskThread* CWelsThreadPool::GetIdleThread() { · 16 unmodified lines | |||
| 250 | } | 235 | } |
| 251 | 236 | ||
| 252 | int32_t CWelsThreadPool::GetBusyThreadNum() { | 237 | int32_t CWelsThreadPool::GetBusyThreadNum() { |
| 253 | return static_cast<int32_t> (m_cBusyThreads.size()); | 238 | return static_cast<int32_t> (m_cBusyThreads->size()); |
| 254 | } | 239 | } |
| 255 | 240 | ||
| 256 | int32_t CWelsThreadPool::GetIdleThreadNum() { | 241 | int32_t CWelsThreadPool::GetIdleThreadNum() { |