Class KomodiaDNS::CDNSManager::
ThreadProc()
Base ClassesData ItemsConstructorsDestructorsFunctionsCustom CodeGo to hierarchy chart    Prev page: SetDNSTimeoutNext page: Uninitialize    Show member index
Private Function Declared in:
DNSManager.h

'Declaration' icon -- Shortcut to top of page. Declaration

static BOOL ThreadProc(
    CPeriodicThread::ThreadStage aStage,
    LPVOID lpData);

'Description' icon -- Shortcut to top of page. Description

Thread proc to iterate the records

'Function Body' icon -- Shortcut to top of page. Function Body

try
{
    //Only if we are running
    if (aStage!=CPeriodicThread::tsBody)
        return TRUE;

    //Get our class
    CDNSManager* pClass;
    pClass=(CDNSManager*)lpData;

    //Lock the CCsection
    CCriticalAutoRelease aRelease(pClass->m_pCSection);

    //Scan the data
    IDMap::iterator aIterator;
    aIterator=pClass->m_aData.begin();

    //Our timeout vector
    typedef std::vector<DNSData> TimeoutVector;
    TimeoutVector aTimeoutVector;

    //Iterate it now
    while (aIterator!=pClass->m_aData.end())
    {
        //Check the times
        if (aIterator->second.dwTimeout &&
            GetTickCount()-aIterator->second.dwTime>aIterator->second.dwTimeout &&
            !aIterator->second.bNotified &&
            !aIterator->second.bTimedout)
        {
            //It's a timeout
            //Set ir
            aIterator->second.bTimedout=TRUE;
            aIterator->second.dwTimedoutTime=GetTickCount();

            //Insert it
            aTimeoutVector.push_back(aIterator->second);

            //Next data
            ++aIterator;
        }
        else if (GetTickCount()-aIterator->second.dwTimedoutTime>DELETE_TIME &&
                 aIterator->second.bTimedout)
        {
            //Save the data
            IDMap::iterator aBackupIterator=aIterator;
            ++aIterator;

            //And delete it
            pClass->m_aData.erase(aBackupIterator);
        }
        else
            //Next data
            ++aIterator;
    }

    //Exit the CS
    aRelease.Exit();

    //Spawn the timeouts
    TimeoutVector::const_iterator aTimeoutIterator;
    aTimeoutIterator=aTimeoutVector.begin();

    //Iterate it
    while (aTimeoutIterator!=aTimeoutVector.end())
    {
        //Spawn a timeout
        pClass->OnDNSTimeout(aTimeoutIterator->aQuery,
                             aTimeoutIterator->lpData);

        //Next item
        ++aTimeoutIterator;
    }

    //Done
    return TRUE;
}
ERROR_HANDLER_STATIC_RETURN(CDNSManager_Class,"ThreadProc",THREAD_DO_NOTHING_EXIT_VALUE)

'See Also' icon -- Shortcut to top of page. See Also

Class Overview Class Overview  |  Public base class CErrorHandler  |  Hierarchy Chart Hierarchy Chart


Get Surveyor!This web site was generated using Surveyor V4.50.811.1.  Click here for more information. Site content copyright © 2003 Komodia LTD.. See the About page for additional notices. This page last updated: 24 Feb 2003.