Showing the changes to codec/common/src/WelsThreadPool.cpp (1 of 6 files). Show all
Unified · Split
| @@ -94,7 +94,7 @@ CWelsThreadPool* CWelsThreadPool::AddReference() { · 93 unmodified lines | |||
| 94 | } | 94 | } |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | //fprintf(stdout, "m_iRefCount=%d, iMaxThreadNum=%d\n", m_iRefCount, m_iMaxThreadNum); | 97 | ////fprintf(stdout, "m_iRefCount=%d, iMaxThreadNum=%d\n", m_iRefCount, m_iMaxThreadNum); |
| 98 | 98 | ||
| 99 | ++ m_iRefCount; | 99 | ++ m_iRefCount; |
| 100 | //fprintf(stdout, "m_iRefCount2=%d\n", m_iRefCount); | 100 | //fprintf(stdout, "m_iRefCount2=%d\n", m_iRefCount); |
| @@ -135,9 +135,10 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IW · 34 unmodified lines | |||
| 135 | RemoveThreadFromBusyList (pThread); | 135 | RemoveThreadFromBusyList (pThread); |
| 136 | AddThreadToIdleQueue (pThread); | 136 | AddThreadToIdleQueue (pThread); |
| 137 | 137 | ||
| 138 | if (pTask->GetSink()) { | 138 | if (pTask && pTask->GetSink()) { |
| 139 | pTask->GetSink()->OnTaskExecuted(); | ||
| 140 | //fprintf(stdout, "CWelsThreadPool::OnTaskStop 1: Task %x at Thread %x Finished, m_pSink=%x\n", pTask, pThread, pTask->GetSink()); | 139 | //fprintf(stdout, "CWelsThreadPool::OnTaskStop 1: Task %x at Thread %x Finished, m_pSink=%x\n", pTask, pThread, pTask->GetSink()); |
| 140 | pTask->GetSink()->OnTaskExecuted(); | ||
| 141 | ////fprintf(stdout, "CWelsThreadPool::OnTaskStop 1: Task %x at Thread %x Finished, m_pSink=%x\n", pTask, pThread, pTask->GetSink()); | ||
| 141 | } | 142 | } |
| 142 | //if (m_pSink) { | 143 | //if (m_pSink) { |
| 143 | // m_pSink->OnTaskExecuted (pTask); | 144 | // m_pSink->OnTaskExecuted (pTask); |
| @@ -222,13 +223,20 @@ void CWelsThreadPool::ExecuteTask() { · 78 unmodified lines | |||
| 222 | CWelsTaskThread* pThread = NULL; | 223 | CWelsTaskThread* pThread = NULL; |
| 223 | IWelsTask* pTask = NULL; | 224 | IWelsTask* pTask = NULL; |
| 224 | while (GetWaitedTaskNum() > 0) { | 225 | while (GetWaitedTaskNum() > 0) { |
| 226 | //fprintf(stdout, "ThreadPool: ExecuteTask: waiting task %d\n", GetWaitedTaskNum()); | ||
| 225 | pThread = GetIdleThread(); | 227 | pThread = GetIdleThread(); |
| 226 | if (pThread == NULL) { | 228 | if (pThread == NULL) { |
| 229 | //fprintf(stdout, "ThreadPool: ExecuteTask: no IdleThread\n"); | ||
| 230 | |||
| 227 | break; | 231 | break; |
| 228 | } | 232 | } |
| 229 | pTask = GetWaitedTask(); | 233 | pTask = GetWaitedTask(); |
| 230 | //fprintf(stdout, "ThreadPool: ExecuteTask = %x at thread %x\n", pTask, pThread); | 234 | //fprintf(stdout, "ThreadPool: ExecuteTask = %x at thread %x\n", pTask, pThread); |
| 231 | pThread->SetTask (pTask); | 235 | if (pTask) { |
| 236 | pThread->SetTask (pTask); | ||
| 237 | } else { | ||
| 238 | AddThreadToIdleQueue (pThread); | ||
| 239 | } | ||
| 232 | } | 240 | } |
| 233 | } | 241 | } |
| 234 | 242 | ||
| @@ -309,32 +317,33 @@ bool CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { · 74 unmodified lines | |||
| 309 | CWelsTaskThread* CWelsThreadPool::GetIdleThread() { | 317 | CWelsTaskThread* CWelsThreadPool::GetIdleThread() { |
| 310 | CWelsAutoLock cLock (m_cLockIdleTasks); | 318 | CWelsAutoLock cLock (m_cLockIdleTasks); |
| 311 | 319 | ||
| 312 | //fprintf(stdout, "CWelsThreadPool::GetIdleThread=%d\n", m_cIdleThreads->size()); | 320 | if (NULL == m_cIdleThreads || m_cIdleThreads->size() == 0) { |
| 313 | if (m_cIdleThreads->size() == 0) { | ||
| 314 | return NULL; | 321 | return NULL; |
| 315 | } | 322 | } |
| 316 | 323 | ||
| 324 | //fprintf(stdout, "CWelsThreadPool::GetIdleThread=%d\n", m_cIdleThreads->size()); | ||
| 325 | |||
| 317 | CWelsTaskThread* pThread = m_cIdleThreads->begin(); | 326 | CWelsTaskThread* pThread = m_cIdleThreads->begin(); |
| 318 | m_cIdleThreads->pop_front(); | 327 | m_cIdleThreads->pop_front(); |
| 319 | return pThread; | 328 | return pThread; |
| 320 | } | 329 | } |
| 321 | 330 | ||
| 322 | int32_t CWelsThreadPool::GetBusyThreadNum() { | 331 | int32_t CWelsThreadPool::GetBusyThreadNum() { |
| 323 | return m_cBusyThreads->size(); | 332 | return (m_cBusyThreads?m_cBusyThreads->size():0); |
| 324 | } | 333 | } |
| 325 | 334 | ||
| 326 | int32_t CWelsThreadPool::GetIdleThreadNum() { | 335 | int32_t CWelsThreadPool::GetIdleThreadNum() { |
| 327 | return m_cIdleThreads->size(); | 336 | return (m_cIdleThreads?m_cIdleThreads->size():0); |
| 328 | } | 337 | } |
| 329 | 338 | ||
| 330 | int32_t CWelsThreadPool::GetWaitedTaskNum() { | 339 | int32_t CWelsThreadPool::GetWaitedTaskNum() { |
| 331 | return m_cWaitedTasks->size(); | 340 | return (m_cWaitedTasks?m_cWaitedTasks->size():0); |
| 332 | } | 341 | } |
| 333 | 342 | ||
| 334 | IWelsTask* CWelsThreadPool::GetWaitedTask() { | 343 | IWelsTask* CWelsThreadPool::GetWaitedTask() { |
| 335 | CWelsAutoLock lock (m_cLockWaitedTasks); | 344 | CWelsAutoLock lock (m_cLockWaitedTasks); |
| 336 | 345 | ||
| 337 | if (m_cWaitedTasks->size() == 0) { | 346 | if (NULL==m_cWaitedTasks || m_cWaitedTasks->size() == 0) { |
| 338 | return NULL; | 347 | return NULL; |
| 339 | } | 348 | } |
| 340 | 349 | ||
| @@ -347,6 +356,9 @@ IWelsTask* CWelsThreadPool::GetWaitedTask() { · 6 unmodified lines | |||
| 347 | 356 | ||
| 348 | void CWelsThreadPool::ClearWaitedTasks() { | 357 | void CWelsThreadPool::ClearWaitedTasks() { |
| 349 | CWelsAutoLock cLock (m_cLockWaitedTasks); | 358 | CWelsAutoLock cLock (m_cLockWaitedTasks); |
| 359 | if (NULL == m_cWaitedTasks) { | ||
| 360 | return; | ||
| 361 | } | ||
| 350 | IWelsTask* pTask = NULL; | 362 | IWelsTask* pTask = NULL; |
| 351 | while (0 != m_cWaitedTasks->size()) { | 363 | while (0 != m_cWaitedTasks->size()) { |
| 352 | pTask = m_cWaitedTasks->begin(); | 364 | pTask = m_cWaitedTasks->begin(); |