#include "ScannerPair.h" #include ScannerPair::ScannerPair() :m_Thread(INVALID_HANDLE_VALUE) { } ScannerPair::~ScannerPair() { ClearData(); } void ScannerPair::ClearData() { for (list::iterator it = m_LeftDatas.begin(); it != m_LeftDatas.end();it++) { ScannerPairDBInfo* dbi = (*it); delete dbi; dbi = NULL; } m_LeftDatas.clear(); for (list::iterator it = m_RightDatas.begin(); it != m_RightDatas.end(); it++) { ScannerPairDBInfo* dbi = (*it); delete dbi; dbi = NULL; } m_RightDatas.clear(); while (!m_LeftZeroSeqDatas.empty()) { ScannerPairDBInfo * info= m_LeftZeroSeqDatas.front(); delete info; info = NULL; m_LeftZeroSeqDatas.pop(); } while (!m_RightZeroSeqDatas.empty()) { ScannerPairDBInfo * info = m_RightZeroSeqDatas.front(); delete info; info = NULL; m_RightZeroSeqDatas.pop(); } } void ScannerPair::WaitFinished() { if (m_Thread == INVALID_HANDLE_VALUE)return; WaitForSingleObject(m_Thread, INFINITE); ClearData(); CloseHandle(m_Thread); m_Thread = INVALID_HANDLE_VALUE; } void ScannerPair::BeginWork() { if (m_RightDatas.empty() && m_LeftDatas.empty() && m_LeftZeroSeqDatas.empty() && m_RightZeroSeqDatas.empty())return ; if (m_Thread != INVALID_HANDLE_VALUE) { m_LeftScanner->StopWork(); m_RightScanner->StopWork(); TerminateThread(m_Thread, 1); CloseHandle(m_Thread); m_Thread = INVALID_HANDLE_VALUE; } m_Thread = AtlCreateThread(ScanProc, this); } DWORD ScannerPair::ScanProc(ScannerPair* _this) { if (_this) { _this->Scan(); } return 0; } void ScannerPair::Scan() { /*for (set::iterator it = m_OrderSet.begin(); it != m_OrderSet.end();it++) { if (BaseCtrl::IsStop())break; int order = (*it); while (!m_LeftDatas.empty()) { ScannerPairDBInfo* info= m_LeftDatas.front(); if (info->m_DB->order == order) { m_LeftScanner->AddDataBlock(info->m_BDB, info->m_Part, info->m_PS); m_LeftDatas.pop(); } else { break; } } while (!m_RightDatas.empty()) { ScannerPairDBInfo* info = m_RightDatas.front(); if (info->m_DB->order == order) { m_RightScanner->AddDataBlock(info->m_BDB, info->m_Part, info->m_PS); m_RightDatas.pop(); } else { break; } } if (BaseCtrl::IsStop())break; m_LeftScanner->BeginWork(); m_RightScanner->BeginWork(); Sleep(5); m_LeftScanner->WaitFinish(); m_RightScanner->WaitFinish(); } ClearData();*/ }