#include "StdAfx.h" #include "Thread_ViewRefresh.h" CThread_ViewRefresh::CThread_ViewRefresh(DWORD dwPeriod) : CTimerThreadPool(dwPeriod,10) { m_pV2M = NULL; } CThread_ViewRefresh::~CThread_ViewRefresh(void) { } BOOL CThread_ViewRefresh::CreateThread() { BOOL bReturn = TRUE; // Thread 积己 饶 Thread 荐青 bReturn = CreateTimerThread(this); return bReturn; } void CThread_ViewRefresh::TimerThreadProcess(PVOID pParameter) { CThread_ViewRefresh* pThread = static_cast(pParameter); if(pThread == NULL) return; std::vector *pVecViewMSG; std::vector vecMSG; std::vector::iterator it; CScheduleViewMessage SendViewMSG; if(pThread->m_pV2M == NULL) { return; } CSingleLock mylock(&pThread->m_csViewMSG); mylock.Lock(); pVecViewMSG = pThread->GetVecScheduleViewMSG(); if(pVecViewMSG->empty() == TRUE) { mylock.Unlock(); return; } vecMSG.resize(pVecViewMSG->size()); std::copy(pVecViewMSG->begin(),pVecViewMSG->end(),vecMSG.begin()); pVecViewMSG->clear(); mylock.Unlock(); Sleep(0); for(it=vecMSG.begin();it!=vecMSG.end();it++) { SendViewMSG = *it; pThread->m_pV2M->Send_ViewRefresh(&SendViewMSG); } vecMSG.clear(); } int CThread_ViewRefresh::AddViewMSG(int nJobIndex,int nSide,int nState,int nDispLine) { CSingleLock mylock(&m_csViewMSG); mylock.Lock(); CScheduleViewMessage ViewMessage; ViewMessage.ProcMsg.nJobIndex = nJobIndex; ViewMessage.ProcMsg.nSide = nSide; ViewMessage.ProcMsg.nState = nState; ViewMessage.ProcMsg.nDispLine = nDispLine; m_VecScheduleViewMSG.push_back(ViewMessage); int nCount = (int)m_VecScheduleViewMSG.size(); mylock.Unlock(); return nCount; } BOOL CThread_ViewRefresh::ClearViewMSG() { CSingleLock mylock(&m_csViewMSG); mylock.Lock(); m_VecScheduleViewMSG.clear(); mylock.Unlock(); return TRUE; }