inline void ThreadPool::Add(Task* t) { assert(t != NULL); queue.Push(t); if (queue.Size() > GetIdleThreadCount()) // may be need add new thread { int need1 = maxThread - GetThreadCount(); int need2 = queue.Size() - GetIdleThreadCount(); int count = (need1 > need2) ? need2 : need1; AddThread(count); } else // may be need delete idle timeout thread { while (RemoveOneIdleTimeoutThread()) { } } RemoveStopedThreads(); }