81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
#pragma once
|
|
#include <set>
|
|
|
|
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<int> m_OrderSet;
|
|
list<ScannerPairDBInfo*> m_LeftDatas;
|
|
list<ScannerPairDBInfo*> m_RightDatas;
|
|
|
|
queue<ScannerPairDBInfo*> m_LeftZeroSeqDatas;
|
|
queue<ScannerPairDBInfo*> m_RightZeroSeqDatas;
|
|
|
|
Scanner* m_LeftScanner;
|
|
Scanner* m_RightScanner;
|
|
|
|
};
|
|
|