GrpcPrint/PrintS/ScannerCtrl/ScannerPair.h
2024-03-26 10:33:00 +08:00

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;
};