| | |
| | | m_pStatsThread = nullptr; |
| | | m_pAccordionWnd = nullptr; |
| | | m_pPageProdOverview = nullptr; |
| | | m_pPageCtrlState = nullptr; |
| | | } |
| | | |
| | | CPanelProduction::~CPanelProduction() |
| | |
| | | m_pAccordionWnd->Setpadding(PADDING_BOTTOM, 2); |
| | | m_pAccordionWnd->LoadExpandIcon(strExpandIcon, strCloseIcon); |
| | | |
| | | m_pPageCtrlState = new CPageCtrlState(); |
| | | m_pPageCtrlState->SetBackgroundColor(m_crBkgnd); |
| | | m_pPageCtrlState->Create(IDD_PROD_CTRL_STATE, GetDlgItem(IDC_ACCORDION_WND1)); |
| | | m_pPageCtrlState->ShowWindow(SW_HIDE); |
| | | m_pAccordionWnd->AddItem("状态", m_pPageCtrlState, 120, TRUE, TRUE); |
| | | |
| | | m_pPageProdOverview = new CPageProdOverview(); |
| | | m_pPageProdOverview->SetBackgroundColor(m_crBkgnd); |
| | | m_pPageProdOverview->Create(IDD_PROD_OVERVIEW, GetDlgItem(IDC_ACCORDION_WND1)); |
| | |
| | | StopStatsThread(); |
| | | |
| | | CDialogEx::OnDestroy(); |
| | | |
| | | if (m_pPageCtrlState != nullptr) { |
| | | m_pPageCtrlState->DestroyWindow(); |
| | | delete m_pPageCtrlState; |
| | | m_pPageCtrlState = nullptr; |
| | | } |
| | | if (m_pPageProdOverview != nullptr) { |
| | | m_pPageProdOverview->DestroyWindow(); |
| | | delete m_pPageProdOverview; |
| | | m_pPageProdOverview = nullptr; |
| | | } |
| | | |
| | | if (m_hbrBkgnd != nullptr) { |
| | | ::DeleteObject(m_hbrBkgnd); |
| | |
| | | } |
| | | } |
| | | |
| | | BOOL CPanelProduction::TryGetShiftSummary(ProductionShiftSummary& outSummary) |
| | | BOOL CPanelProduction::TryGetDayNightSummaries(ProductionShiftSummary& outDay, ProductionShiftSummary& outNight) |
| | | { |
| | | CSingleLock lock(&m_csShiftSummary, TRUE); |
| | | if (!m_bShiftSummaryValid) return FALSE; |
| | | outSummary = m_shiftSummary; |
| | | outDay = m_daySummary; |
| | | outNight = m_nightSummary; |
| | | return TRUE; |
| | | } |
| | | |
| | |
| | | for (;;) { |
| | | if (self->m_evStopStats.Lock(intervalMs)) break; |
| | | |
| | | ProductionShiftSummary summary; |
| | | if (ProductionStats::ComputeCurrentShiftSummary(theApp.m_model.m_configuration, summary)) { |
| | | ProductionShiftSummary daySummary; |
| | | ProductionShiftSummary nightSummary; |
| | | if (ProductionStats::ComputeDayNightSummaries(theApp.m_model.m_configuration, daySummary, nightSummary)) { |
| | | CSingleLock lock(&self->m_csShiftSummary, TRUE); |
| | | self->m_shiftSummary = std::move(summary); |
| | | self->m_daySummary = std::move(daySummary); |
| | | self->m_nightSummary = std::move(nightSummary); |
| | | self->m_bShiftSummaryValid = TRUE; |
| | | } |
| | | } |
| | |
| | | void CPanelProduction::OnTimer(UINT_PTR nIDEvent) |
| | | { |
| | | // TODO: 在此添加消息处理程序代码和/或调用默认值 |
| | | if (nIDEvent == 1) { |
| | | ProductionShiftSummary outSummary; |
| | | if (TryGetShiftSummary(outSummary)) { |
| | | TRACE("OnTimer outSummary.output.pairsPass:%d\n", outSummary.output.pairsPass); |
| | | } |
| | | } |
| | | |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |