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