// ProcPADThread.cpp : implementation file
|
//
|
|
#include "StdAfx.h"
|
#include "Thread_CheckSeq.h"
|
#include "Glass_Data.h"
|
|
#ifdef _DEBUG
|
#define new DEBUG_NEW
|
#undef THIS_FILE
|
static char THIS_FILE[] = __FILE__;
|
#endif
|
|
/////////////////////////////////////////////////////////////////////////////
|
// CThread_CheckSequence
|
CThread_CheckSequence::CThread_CheckSequence(DWORD dwPeriod) : CTimerThreadPool(dwPeriod,1)
|
{
|
m_pC2M = NULL;
|
m_pGlassData = NULL;
|
}
|
|
CThread_CheckSequence::~CThread_CheckSequence()
|
{
|
ClearMessage();
|
}
|
|
BOOL CThread_CheckSequence::CreateThread()
|
{
|
BOOL bReturn = TRUE;
|
|
// Thread »ý¼º ÈÄ Thread ¼öÇà
|
bReturn = CreateTimerThread(this);
|
|
return bReturn;
|
}
|
|
/////////////////////////////////////////////////////////////////////////////
|
// CThread_CheckSequence message handlers
|
|
void CThread_CheckSequence::ClearMessage()
|
{
|
CSingleLock MyLock(&m_csCheckMSG);
|
MyLock.Lock();
|
|
std::vector<CCheckSeqMessage> *pVecCheckMSG;
|
pVecCheckMSG = GetVecCheckSeqMSG();
|
pVecCheckMSG->clear();
|
|
MyLock.Unlock();
|
}
|
|
void CThread_CheckSequence::TimerThreadProcess(PVOID pParameter)
|
{
|
CThread_CheckSequence* pSeqThread = static_cast<CThread_CheckSequence*>(pParameter);
|
if(pSeqThread == NULL)
|
return;
|
|
if(pSeqThread->m_pC2M == NULL || pSeqThread->m_pGlassData == NULL)
|
{
|
return;
|
}
|
|
std::vector<CCheckSeqMessage> *pVecCheckMSG,vecMSG;
|
std::vector<CCheckSeqMessage>::iterator it;
|
CCheckSeqMessage SendCheckMSG;
|
CGlass_Data *pStats = pSeqThread->m_pGlassData;
|
|
if(pStats == NULL)
|
{
|
return;
|
}
|
|
|
CSingleLock SeqLock(&pSeqThread->m_csCheckMSG);
|
SeqLock.Lock();
|
|
pVecCheckMSG = GetVecCheckSeqMSG();
|
if(pVecCheckMSG->empty() == TRUE)
|
{
|
SeqLock.Unlock();
|
return;
|
}
|
|
vecMSG.resize(pVecCheckMSG->size());
|
std::copy(pVecCheckMSG->begin(),pVecCheckMSG->end(),vecMSG.begin());
|
pVecCheckMSG->clear();
|
|
SeqLock.Unlock();
|
|
Sleep(0);
|
|
for(it=vecMSG.begin();it!=vecMSG.end();it++)
|
{
|
SendCheckMSG = *it;
|
|
SendCheckMSG.dwTickEnd = GetTickCount();
|
SendCheckMSG.dwDuration = SendCheckMSG.dwTickEnd - SendCheckMSG.dwTickStart;
|
|
if(pStats->IsPostProcStart() == TRUE) // Post Process°¡ ½ÃÀ۵ǾúÀ¸¸é ÁË´Ù »èÁ¦ ÇÑ´Ù.
|
{
|
it->bDelete = TRUE;
|
continue;
|
}
|
|
if(SendCheckMSG.dwDuration >= SendCheckMSG.dwCheckTime)
|
{
|
if(pStats->IsPostProcStart() == FALSE)
|
pSeqThread->m_pC2M->CheckSeqMSG_Received(&SendCheckMSG);
|
it->bDelete = TRUE;
|
}
|
}
|
|
CSingleLock MyLock(&pSeqThread->m_csCheckMSG);
|
MyLock.Lock();
|
|
pVecCheckMSG = pSeqThread->GetVecCheckSeqMSG();
|
for(it=vecMSG.begin();it!=vecMSG.end();it++)
|
{
|
if(it->bDelete == FALSE)
|
{
|
pVecCheckMSG->push_back(*it);
|
}
|
}
|
|
vecMSG.clear();
|
MyLock.Unlock();
|
}
|
|
int CThread_CheckSequence::AddCheckSeqMSG(CHECKSEQ_MESSAGE_SECTION emSection,DWORD dwChkTime,int iScan)
|
{
|
int nCount = 0;
|
|
CSingleLock MyLock(&m_csCheckMSG);
|
MyLock.Lock();
|
|
CCheckSeqMessage seqMsg;
|
|
seqMsg.SetCheck(emSection,dwChkTime,iScan);
|
m_VecCheckSeqMSG.push_back(seqMsg);
|
nCount = (int)m_VecCheckSeqMSG.size();
|
|
MyLock.Unlock();
|
return nCount;
|
}
|