112 lines
2.4 KiB
C++
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();*/
|
||
|
}
|