| 249 | } |
| 250 | |
| 251 | WELS_THREAD_ERROR_CODE CWelsThreadPool::QueueTask (IWelsTask* pTask) { |
| 252 | CWelsAutoLock cLock (m_cLockPool); |
| 253 | |
| 254 | //fprintf(stdout, "CWelsThreadPool::QueueTask: %d, pTask=%x\n", m_iRefCount, pTask); |
| 255 | if (GetWaitedTaskNum() == 0) { |
| 256 | CWelsTaskThread* pThread = GetIdleThread(); |
| 257 | |
| 258 | if (pThread != NULL) { |
| 259 | //fprintf(stdout, "ThreadPool: ExecuteTask = %x at thread %x\n", pTask, pThread); |
| 260 | pThread->SetTask (pTask); |
| 261 | |
| 262 | return WELS_THREAD_ERROR_OK; |
| 263 | } |
| 264 | } |
| 265 | //fprintf(stdout, "ThreadPool: AddTaskToWaitedList: %x\n", pTask); |
| 266 | if (false == AddTaskToWaitedList (pTask)) { |
| 267 | return WELS_THREAD_ERROR_GENERAL; |
| 268 | } |
| 269 | |
| 270 | //fprintf(stdout, "ThreadPool: SignalThread: %x\n", pTask); |
| 271 | SignalThread(); |
| 272 | return WELS_THREAD_ERROR_OK; |
| 273 | } |
| 274 | |
| 275 | WELS_THREAD_ERROR_CODE CWelsThreadPool::CreateIdleThread() { |
| 276 | CWelsTaskThread* pThread = new CWelsTaskThread (this); |