Showing the changes to codec/common/src/WelsThreadPool.cpp (1 of 6 files). Show all
Unified · Split
| @@ -50,6 +50,7 @@ namespace WelsCommon { · 49 unmodified lines | |||
| 50 | 50 | ||
| 51 | CWelsThreadPool::CWelsThreadPool (IWelsThreadPoolSink* pSink, int32_t iMaxThreadNum) : | 51 | CWelsThreadPool::CWelsThreadPool (IWelsThreadPoolSink* pSink, int32_t iMaxThreadNum) : |
| 52 | m_pSink (pSink) { | 52 | m_pSink (pSink) { |
| 53 | m_cWaitedTasks = new CWelsCircleQueue<IWelsTask>(); | ||
| 53 | m_iMaxThreadNum = 0; | 54 | m_iMaxThreadNum = 0; |
| 54 | 55 | ||
| 55 | Init (iMaxThreadNum); | 56 | Init (iMaxThreadNum); |
| @@ -58,6 +59,8 @@ CWelsThreadPool::CWelsThreadPool (IWelsThreadPoolSink* pSink, int32_t iMaxThread · 2 unmodified lines | |||
| 58 | 59 | ||
| 59 | CWelsThreadPool::~CWelsThreadPool() { | 60 | CWelsThreadPool::~CWelsThreadPool() { |
| 60 | Uninit(); | 61 | Uninit(); |
| 62 | |||
| 63 | delete m_cWaitedTasks; | ||
| 61 | } | 64 | } |
| 62 | 65 | ||
| 63 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) { | 66 | WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) { |
| @@ -239,7 +242,7 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::RemoveThreadFromBusyMap (CWelsTaskThread · 175 unmodified lines | |||
| 239 | void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { | 242 | void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { |
| 240 | CWelsAutoLock cLock (m_cLockWaitedTasks); | 243 | CWelsAutoLock cLock (m_cLockWaitedTasks); |
| 241 | 244 | ||
| 242 | m_cWaitedTasks.push_back (pTask); | 245 | m_cWaitedTasks->push_back (pTask); |
| 243 | return; | 246 | return; |
| 244 | } | 247 | } |
| 245 | 248 | ||
| @@ -267,37 +270,30 @@ int32_t CWelsThreadPool::GetIdleThreadNum() { · 21 unmodified lines | |||
| 267 | } | 270 | } |
| 268 | 271 | ||
| 269 | int32_t CWelsThreadPool::GetWaitedTaskNum() { | 272 | int32_t CWelsThreadPool::GetWaitedTaskNum() { |
| 270 | return static_cast<int32_t> (m_cWaitedTasks.size()); | 273 | return m_cWaitedTasks->size(); |
| 271 | } | 274 | } |
| 272 | 275 | ||
| 273 | IWelsTask* CWelsThreadPool::GetWaitedTask() { | 276 | IWelsTask* CWelsThreadPool::GetWaitedTask() { |
| 274 | CWelsAutoLock lock (m_cLockWaitedTasks); | 277 | CWelsAutoLock lock (m_cLockWaitedTasks); |
| 275 | 278 | if (m_cWaitedTasks->size() == 0) { | |
| 276 | if (m_cWaitedTasks.size() == 0) { | ||
| 277 | return NULL; | 279 | return NULL; |
| 278 | } | 280 | } |
| 279 | 281 | ||
| 280 | std::list<IWelsTask*>::iterator it = m_cWaitedTasks.begin(); | 282 | IWelsTask* pTask = m_cWaitedTasks->begin(); |
| 281 | IWelsTask* pTask = *it; | ||
| 282 | 283 | ||
| 283 | m_cWaitedTasks.pop_front(); | 284 | m_cWaitedTasks->pop_front(); |
| 284 | 285 | ||
| 285 | return pTask; | 286 | return pTask; |
| 286 | } | 287 | } |
| 287 | 288 | ||
| 288 | void CWelsThreadPool::ClearWaitedTasks() { | 289 | void CWelsThreadPool::ClearWaitedTasks() { |
| 289 | CWelsAutoLock cLock (m_cLockWaitedTasks); | 290 | CWelsAutoLock cLock (m_cLockWaitedTasks); |
| 290 | |||
| 291 | std::list<IWelsTask*>::iterator iter = m_cWaitedTasks.begin(); | ||
| 292 | |||
| 293 | if (m_pSink) { | 291 | if (m_pSink) { |
| 294 | while (iter != m_cWaitedTasks.end()) { | 292 | while (0 != m_cWaitedTasks->size()) { |
| 295 | m_pSink->OnTaskCancelled (*iter); | 293 | m_pSink->OnTaskCancelled (m_cWaitedTasks->begin()); |
| 296 | ++ iter; | 294 | m_cWaitedTasks->pop_front(); |
| 297 | } | 295 | } |
| 298 | } | 296 | } |
| 299 | |||
| 300 | m_cWaitedTasks.clear(); | ||
| 301 | } | 297 | } |
| 302 | 298 | ||
| 303 | } | 299 | } |