Example #1
0
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();
}