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

112 lines
2.4 KiB
C++

#include "ScannerPair.h"
#include <atlbase.h>
ScannerPair::ScannerPair()
:m_Thread(INVALID_HANDLE_VALUE)
{
}
ScannerPair::~ScannerPair()
{
ClearData();
}
void ScannerPair::ClearData()
{
for (list<ScannerPairDBInfo*>::iterator it = m_LeftDatas.begin(); it != m_LeftDatas.end();it++) {
ScannerPairDBInfo* dbi = (*it);
delete dbi;
dbi = NULL;
}
m_LeftDatas.clear();
for (list<ScannerPairDBInfo*>::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<int>::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();*/
}