void ThreadPool::yield(TaskGroup &wait) { std::chrono::milliseconds waitSpan(10); uint32 id = _threadCount; // Threads not in the pool get a previously unassigned id auto iter = _idToNumericId.find(std::this_thread::get_id()); if (iter != _idToNumericId.end()) id = iter->second; while (!wait.isDone() && !_terminateFlag) { uint32 subTaskId; std::shared_ptr<TaskGroup> task; { std::unique_lock<std::mutex> lock(_taskMutex); if (!_taskCond.wait_for(lock, waitSpan, [this] {return _terminateFlag || !_tasks.empty();})) continue; task = acquireTask(subTaskId); } if (task) task->run(id, subTaskId); } }