#pragma once #include using namespace std; #include "Scanner.h" class ScannerPairDBInfo { public: ScannerPairDBInfo(MetaData::DataBlock* db, BPBinary::BinDataBlock* bdb, MetaData::Part* part, MetaData::ParameterSet* ps) { m_DB = db; m_BDB = bdb; m_Part = part; m_PS = ps; } ~ScannerPairDBInfo(){} public: MetaData::DataBlock* m_DB; BPBinary::BinDataBlock* m_BDB; MetaData::Part* m_Part; MetaData::ParameterSet* m_PS; }; class ScannerPair { public: ScannerPair(); ~ScannerPair(); void AddDB(Scanner* sc, MetaData::DataBlock* db, BPBinary::BinDataBlock* bdb, MetaData::Part* part, MetaData::ParameterSet* ps) { if (!IsContain(sc))return; if (db->order == 0) { if (sc == m_LeftScanner) { m_LeftZeroSeqDatas.push(new ScannerPairDBInfo(db, bdb, part, ps)); } else { m_RightZeroSeqDatas.push(new ScannerPairDBInfo(db, bdb, part, ps)); } } else { if (sc == m_LeftScanner) { m_LeftDatas.push_back(new ScannerPairDBInfo(db, bdb, part, ps)); } else { m_RightDatas.push_back(new ScannerPairDBInfo(db, bdb, part, ps)); } } } void ClearData(); bool IsContain(Scanner* sc) { if (!sc)return false; if (sc == m_LeftScanner || sc == m_RightScanner) { return true; } else return false; } void BeginWork(); void WaitFinished(); private: static DWORD WINAPI ScanProc(ScannerPair* _this); void Scan(); public: HANDLE m_Thread; //set m_OrderSet; list m_LeftDatas; list m_RightDatas; queue m_LeftZeroSeqDatas; queue m_RightZeroSeqDatas; Scanner* m_LeftScanner; Scanner* m_RightScanner; };