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 | 52 | m_pSink (pSink) { |
| 53 | 53 | m_cWaitedTasks = new CWelsCircleQueue<IWelsTask>(); |
| 54 | 54 | m_cIdleThreads = new CWelsCircleQueue<CWelsTaskThread>(); |
| 55 | + m_cBusyThreads = new CWelsList<CWelsTaskThread>(); | |
| 55 | 56 | m_iMaxThreadNum = 0; |
| 56 | 57 | |
| 57 | 58 | Init (iMaxThreadNum); |
| @@ -63,16 +64,17 @@ CWelsThreadPool::~CWelsThreadPool() { · 5 unmodified lines | ||
| 63 | 64 | |
| 64 | 65 | delete m_cWaitedTasks; |
| 65 | 66 | delete m_cIdleThreads; |
| 67 | + delete m_cBusyThreads; | |
| 66 | 68 | } |
| 67 | 69 | |
| 68 | 70 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) { |
| 69 | − AddThreadToBusyMap (pThread); | |
| 71 | + AddThreadToBusyList (pThread); | |
| 70 | 72 | |
| 71 | 73 | return WELS_THREAD_ERROR_OK; |
| 72 | 74 | } |
| 73 | 75 | |
| 74 | 76 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IWelsTask* pTask) { |
| 75 | − RemoveThreadFromBusyMap (pThread); | |
| 77 | + RemoveThreadFromBusyList (pThread); | |
| 76 | 78 | AddThreadToIdleQueue (pThread); |
| 77 | 79 | |
| 78 | 80 | if (m_pSink) { |
| @@ -198,36 +200,19 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToIdleQueue (CWelsTaskThread* p · 119 unmodified lines | ||
| 198 | 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 | 204 | CWelsAutoLock cLock (m_cLockBusyTasks); |
| 203 | − | |
| 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 | − | |
| 205 | + m_cBusyThreads->push_back (pThread); | |
| 214 | 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 | 210 | CWelsAutoLock cLock (m_cLockBusyTasks); |
| 219 | − | |
| 220 | − uintptr_t id = pThread->GetID(); | |
| 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); | |
| 211 | + if (m_cBusyThreads->erase(pThread)) { | |
| 212 | + return WELS_THREAD_ERROR_OK; | |
| 226 | 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 | 218 | void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { |
| @@ -250,7 +235,7 @@ CWelsTaskThread* CWelsThreadPool::GetIdleThread() { · 16 unmodified lines | ||
| 250 | 235 | } |
| 251 | 236 | |
| 252 | 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 | 241 | int32_t CWelsThreadPool::GetIdleThreadNum() { |