| | |
| | | m_pThread_SendMSG = NULL; |
| | | m_pThread_CheckSequence = NULL; |
| | | m_pThread_ViewRefresh = NULL; |
| | | m_pSaveFullImgThread = NULL; |
| | | m_nScanStartCount = 0; |
| | | m_bGlassLoadingEnd = FALSE; |
| | | m_pLicense = NULL; |
| | |
| | | |
| | | BOOL CInterfaceManager::DestroyThread() |
| | | { |
| | | if(m_pThread_SendMSG != NULL) |
| | | { |
| | | if(m_pThread_SendMSG != nullptr) { |
| | | m_pThread_SendMSG->StopThread(); |
| | | delete m_pThread_SendMSG; |
| | | } |
| | | m_pThread_SendMSG = NULL; |
| | | m_pThread_SendMSG = nullptr; |
| | | |
| | | if(m_pThread_CheckSequence != NULL) |
| | | { |
| | | if(m_pThread_CheckSequence != nullptr) { |
| | | m_pThread_CheckSequence->StopThread(); |
| | | delete m_pThread_CheckSequence; |
| | | } |
| | | m_pThread_CheckSequence = NULL; |
| | | m_pThread_CheckSequence = nullptr; |
| | | |
| | | if(m_pThread_ViewRefresh != NULL) |
| | | { |
| | | if(m_pThread_ViewRefresh != nullptr) { |
| | | m_pThread_ViewRefresh->StopThread(); |
| | | delete m_pThread_ViewRefresh; |
| | | } |
| | | m_pThread_ViewRefresh = NULL; |
| | | m_pThread_ViewRefresh = nullptr; |
| | | |
| | | if (m_pSaveFullImgThread != nullptr) { |
| | | m_pSaveFullImgThread->StopThread(); |
| | | delete m_pSaveFullImgThread; |
| | | } |
| | | m_pSaveFullImgThread = nullptr; |
| | | |
| | | return TRUE; |
| | | } |
| | |
| | | |
| | | BOOL CInterfaceManager::PostProcess() |
| | | { |
| | | g_pLog->DisplayMessage(_T("Start PostProcess()")); |
| | | g_pLog->DisplayMessage(_T("Start PostProcess")); |
| | | |
| | | if(m_pThread_CheckSequence != NULL) |
| | | if (m_pThread_CheckSequence != NULL) { |
| | | m_pThread_CheckSequence->ClearMessage(); |
| | | } |
| | | |
| | | if(m_GlassData.IsPostProcStart() == TRUE) |
| | | { |
| | | if(m_GlassData.IsPostProcStart() == TRUE) { |
| | | g_pLog->DisplayMessage(_T("Already Post Processing Start")); |
| | | return TRUE; |
| | | } |
| | |
| | | m_PostProcess.SetView((void*) m_pView); |
| | | m_PostProcess.RunPostProcessing(); |
| | | |
| | | // 馆靛矫 Scan End 脚龋 焊郴扁 傈俊 秦拎具茄促... Scan End 脚龋 焊尘锭 Loading捞 肯丰 救登搁 救焊郴瘤霸 阜囚乐澜.. |
| | | m_bGlassLoadingEnd = FALSE; |
| | | m_bPLCGlassLoading = FALSE; |
| | | |
| | |
| | | |
| | | SetSlashText(GLOBAL_DEFINE::emHide, _T(""), RGB(0, 0, 0)); |
| | | |
| | | if (m_pView != NULL) |
| | | { |
| | | if (m_pView != NULL) { |
| | | m_pView->SetGlassData(&m_GlassData); |
| | | m_pView->RefreshDefect(m_PostProcess.GetResultPath(EM_RESULT_DEFECT)); |
| | | |
| | | if (m_pThread_ViewRefresh != NULL) |
| | | { |
| | | if (m_pThread_ViewRefresh != NULL) { |
| | | m_pThread_ViewRefresh->AddViewMSG(0, 0, VIEW_REFRESH_INSPECT_END, 0); |
| | | } |
| | | } |
| | | |
| | | //CheckExpireDay(); // Check License Defect.. |
| | | WritePLCResult(); |
| | | |
| | | // Loading Ack |
| | | // m_pControlInterface->SendControlBit(emSnd_Short_ScanEnd_Ack, TRUE); |
| | | |
| | | if (m_pThread_SendMSG != NULL) |
| | | if (m_pThread_SendMSG != NULL) { |
| | | m_pThread_SendMSG->AddSendMSG(SEND_MESSAGE_CONTROLSIGNAL, IToC_Ack_ShortScanEndSuccess, TRUE); |
| | | } |
| | | |
| | | if (0 == nDefectCount) |
| | | { |
| | | AfxBeginThread(CopyImageThreadFunc, this); |
| | | } |
| | | else |
| | | { |
| | | Save_FullImg(); |
| | | } |
| | | Save_FullImg(); |
| | | |
| | | #if MINI_LED |
| | | m_PostProcess.RunPostProcessing_SaveFiltImage(); |
| | |
| | | { |
| | | CInterfaceManager *pMain = static_cast<CInterfaceManager*>(pParam); |
| | | |
| | | pMain->Save_FullImg(); |
| | | pMain->Save_FullImg(); |
| | | |
| | | return 0; |
| | | } |
| | |
| | | |
| | | g_pLog->DisplayMessage(_T("Sava %s iCam=%d, iScan=%d, szImage.cx=%ld, pBuffer->szImage.cy=%ld"), PANEL_SIDE[pCamera->m_eDimension], iCam, iScan, pBuffer->szImage.cx, pBuffer->szImage.cy); |
| | | |
| | | if (pBuffer->pImage != NULL && pBuffer->szImage.cx > 100 && pBuffer->szImage.cy > 100) { |
| | | if (m_pSaveFullImgThread != nullptr && pBuffer->pImage != nullptr && pBuffer->szImage.cx > 100 && pBuffer->szImage.cy > 100) { |
| | | strFileJpg.Format(_T("%s\\%s_%s_%s.jpg"), strFolder, strPanelID, PANEL_SIDE[pCamera->m_eDimension], g_pBase->m_strLoadingTime); |
| | | SaveFullImageModern(strFileJpg, pBuffer->pImage, pBuffer->szImage.cx, pBuffer->szImage.cy, (int)pCamera->m_eDimension, 0, nQuality); |
| | | |
| | | if (pHard->m_bAsyncFullSave) { |
| | | CT2A aPath(strFileJpg); |
| | | SaveImgJob job; |
| | | job.strPath = std::string(aPath); |
| | | job.nWidth = (int)pBuffer->szImage.cx; |
| | | job.nHeight = (int)pBuffer->szImage.cy; |
| | | job.nBpp = 1; |
| | | job.nStride = job.nWidth * job.nBpp; |
| | | job.nStartY = 0; |
| | | job.nDimension = (int)pCamera->m_eDimension; |
| | | job.nQuality = nQuality; |
| | | |
| | | // 深拷贝 |
| | | DWORD dwCopyStart = GetTickCount(); |
| | | Lock(); |
| | | size_t nBytes = size_t(job.nStride) * job.nHeight; |
| | | job.vData.resize(nBytes); |
| | | memcpy(job.vData.data(), pBuffer->pImage, nBytes); |
| | | Unlock(); |
| | | DWORD dwCopyEnd = GetTickCount(); |
| | | g_pLog->DisplayMessage(_T("Full Image Copy Time = %d ms, Bytes=%zu, File=%s"), dwCopyEnd - dwCopyStart, nBytes, strFileJpg); |
| | | |
| | | // 入队 |
| | | m_pSaveFullImgThread->Enqueue(std::move(job)); |
| | | g_pLog->DisplayMessage(_T("Full Image Save : %s, Width=%d, Height=%d, Dimension=%s, Quality=%d"), strFileJpg, pBuffer->szImage.cx, pBuffer->szImage.cy, PANEL_SIDE[pCamera->m_eDimension], nQuality); |
| | | } |
| | | else { |
| | | DWORD dwCopyStart = GetTickCount(); |
| | | Lock(); |
| | | SaveFullImageModern(strFileJpg, pBuffer->pImage, pBuffer->szImage.cx, pBuffer->szImage.cy, (int)pCamera->m_eDimension, 0, nQuality); |
| | | Unlock(); |
| | | DWORD dwCopyEnd = GetTickCount(); |
| | | g_pLog->DisplayMessage(_T("Full Image Save Time = %d ms, File=%s"), dwCopyEnd - dwCopyStart, strFileJpg); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | AfxBeginThread(ScanStartCam_1, this); |
| | | AfxBeginThread(ScanStartCam_2, this); |
| | | AfxBeginThread(ScanStartCam_3, this); |
| | | AfxBeginThread(ScanStartCam_4, this); |
| | | AfxBeginThread(ScanStartCam_5, this); |
| | | |
| | | if (m_HardwareRecipe.m_bUseRipInspection) { |
| | | AfxBeginThread(ScanStartCam_4, this); |
| | | AfxBeginThread(ScanStartCam_5, this); |
| | | } |
| | | |
| | | AfxBeginThread(CheckScanStart,this); |
| | | } |
| | |
| | | AfxBeginThread(ScanStartCam_1, this); |
| | | AfxBeginThread(ScanStartCam_2, this); |
| | | AfxBeginThread(ScanStartCam_3, this); |
| | | AfxBeginThread(ScanStartCam_4, this); |
| | | AfxBeginThread(ScanStartCam_5, this); |
| | | |
| | | if (m_HardwareRecipe.m_bUseRipInspection) { |
| | | AfxBeginThread(ScanStartCam_4, this); |
| | | AfxBeginThread(ScanStartCam_5, this); |
| | | } |
| | | |
| | | AfxBeginThread(CheckScanStart,this); |
| | | |
| | |
| | | void CInterfaceManager::CreateThread() |
| | | { |
| | | m_pThread_SendMSG = new CThread_SendMSG(); |
| | | if(m_pThread_SendMSG != NULL) |
| | | { |
| | | if(m_pThread_SendMSG != NULL) { |
| | | m_pThread_SendMSG->SetIN2P(static_cast<IPLCSendInterface2Parent*>(this)); |
| | | m_pThread_SendMSG->CreateThread(); |
| | | } |
| | | |
| | | m_pThread_CheckSequence = new CThread_CheckSequence(); |
| | | if(m_pThread_CheckSequence != NULL) |
| | | { |
| | | if(m_pThread_CheckSequence != NULL) { |
| | | m_pThread_CheckSequence->SetC2M(static_cast<ICheckSequenceInterface2Parent*>(this),&m_GlassData); |
| | | m_pThread_CheckSequence->CreateThread(); |
| | | } |
| | | |
| | | m_pThread_ViewRefresh = new CThread_ViewRefresh(); |
| | | if(m_pThread_ViewRefresh != NULL) |
| | | { |
| | | if(m_pThread_ViewRefresh != NULL) { |
| | | m_pThread_ViewRefresh->SetIN2P(static_cast<IViewRefreshInterface2Parent*>(this)); |
| | | m_pThread_ViewRefresh->CreateThread(); |
| | | } |
| | | |
| | | /* |
| | | m_pThread_NetMSG = new CThread_NetMSG(); |
| | | if(m_pThread_NetMSG != NULL) |
| | | { |
| | | m_pThread_NetMSG->SetIN2P(static_cast<IPLCReceiveInterface2Parent*>(this)); |
| | | m_pThread_NetMSG->CreateThread(); |
| | | m_pSaveFullImgThread = new CThread_SaveFullImg(); |
| | | if (m_pSaveFullImgThread != NULL) { |
| | | m_pSaveFullImgThread->CreateThread(); |
| | | } |
| | | |
| | | |
| | | |
| | | m_pThread_Light = new CThread_Light(); |
| | | if(m_pThread_Light != NULL) |
| | | { |
| | | m_pThread_Light->CreateThread(); |
| | | } |
| | | */ |
| | | } |
| | | |
| | | LPBYTE CInterfaceManager::GetGrabBuffer(DimensionDir eDir,int iVline) |