![]() |
ThreadProc() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
| Private Function |
Declared in: DNSManager.h |
Declaration
static BOOL ThreadProc(
CPeriodicThread::ThreadStage aStage,
LPVOID lpData);
DescriptionThread proc to iterate the records
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
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. |