// 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 *pVecCheckMSG; pVecCheckMSG = GetVecCheckSeqMSG(); pVecCheckMSG->clear(); MyLock.Unlock(); } void CThread_CheckSequence::TimerThreadProcess(PVOID pParameter) { CThread_CheckSequence* pSeqThread = static_cast(pParameter); if(pSeqThread == NULL) return; if(pSeqThread->m_pC2M == NULL || pSeqThread->m_pGlassData == NULL) { return; } std::vector *pVecCheckMSG,vecMSG; std::vector::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; }