Ejemplo n.º 1
0
void* ThreadPool::serviceHandler ()
    {
    TRACE_CALL;

    EventHandler* pEventHandler;

    while (1)
	{
        ::taskPrioritySet (::taskIdSelf (), m_thrPriority);
	
	pEventHandler = 0;

	// remove() will block until a job is inserted into the Q.

	if (remove (pEventHandler) < 0)
	    break;

	if (pEventHandler == 0)
	    break;

	REACTOR_HANDLE handle = pEventHandler->handleGet ();

	if (pEventHandler->handleInput (handle) < 0)
	    pEventHandler->handleClose (handle);
	}

    VxCritSec cs (m_threadCountLock);

    queueSizeSet (--m_threadCount);
    
    return 0;
    }