From 7d6d1769b7b76366fd20ab4358b8c10ce067d04f Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 18 十二月 2025 12:04:54 +0800
Subject: [PATCH] 1.生产数据统计链路已打通。待UI显示;
---
SourceCode/Bond/Servo/CPanelProduction.cpp | 75 +++++++++++++++++++++++++++++++++++++
1 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPanelProduction.cpp b/SourceCode/Bond/Servo/CPanelProduction.cpp
index 0f01b3f..bbc5900 100644
--- a/SourceCode/Bond/Servo/CPanelProduction.cpp
+++ b/SourceCode/Bond/Servo/CPanelProduction.cpp
@@ -1,4 +1,4 @@
-// CPanelProduction.cpp
+锘�// CPanelProduction.cpp
//
#include "stdafx.h"
@@ -20,6 +20,8 @@
m_hbrBkgnd = nullptr;
m_nPanelWidth = 288;
m_hPlaceholder = nullptr;
+ m_bShiftSummaryValid = FALSE;
+ m_pStatsThread = nullptr;
}
CPanelProduction::~CPanelProduction()
@@ -38,6 +40,7 @@
ON_WM_SIZE()
ON_NOTIFY(BYVERTICALLINE_MOVEX, IDC_LINE1, &CPanelProduction::OnVLineMoveX)
ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CPanelProduction::OnBnClickedButtonClose)
+ ON_WM_TIMER()
END_MESSAGE_MAP()
int CPanelProduction::getPanelWidth()
@@ -58,6 +61,9 @@
pLine1->SetBkgndColor(RGB(225, 225, 225));
pLine1->SetLineColor(RGB(198, 198, 198));
pLine1->EnableResize();
+
+ SetTimer(1, 1000 * 10, nullptr);
+ StartStatsThread();
return TRUE; // return TRUE unless you set the focus to a control
// Exception: OCX property pages should return FALSE
@@ -81,6 +87,8 @@
void CPanelProduction::OnDestroy()
{
+ StopStatsThread();
+
CDialogEx::OnDestroy();
if (m_hbrBkgnd != nullptr) {
@@ -123,3 +131,68 @@
pParent->PostMessage(WM_COMMAND, ID_MENU_WND_TEST_PANEL, 0);
}
}
+
+BOOL CPanelProduction::TryGetShiftSummary(ProductionShiftSummary& outSummary)
+{
+ CSingleLock lock(&m_csShiftSummary, TRUE);
+ if (!m_bShiftSummaryValid) return FALSE;
+ outSummary = m_shiftSummary;
+ return TRUE;
+}
+
+void CPanelProduction::StartStatsThread()
+{
+ if (m_pStatsThread != nullptr) return;
+
+ m_evStopStats.ResetEvent();
+
+ m_pStatsThread = AfxBeginThread(&CPanelProduction::StatsThreadProc, this, THREAD_PRIORITY_BELOW_NORMAL, 0, 0);
+ if (m_pStatsThread != nullptr) {
+ m_pStatsThread->m_bAutoDelete = FALSE;
+ }
+}
+
+void CPanelProduction::StopStatsThread()
+{
+ if (m_pStatsThread == nullptr) return;
+
+ m_evStopStats.SetEvent();
+ const DWORD rc = WaitForSingleObject(m_pStatsThread->m_hThread, 5000);
+ if (rc == WAIT_OBJECT_0) {
+ delete m_pStatsThread;
+ }
+ m_pStatsThread = nullptr;
+}
+
+UINT CPanelProduction::StatsThreadProc(LPVOID pParam)
+{
+ CPanelProduction* self = reinterpret_cast<CPanelProduction*>(pParam);
+ if (self == nullptr) return 0;
+
+ const DWORD intervalMs = 5000;
+ for (;;) {
+ if (self->m_evStopStats.Lock(intervalMs)) break;
+
+ ProductionShiftSummary summary;
+ if (ProductionStats::ComputeCurrentShiftSummary(theApp.m_model.m_configuration, summary)) {
+ CSingleLock lock(&self->m_csShiftSummary, TRUE);
+ self->m_shiftSummary = std::move(summary);
+ self->m_bShiftSummaryValid = TRUE;
+ }
+ }
+
+ return 0;
+}
+
+void CPanelProduction::OnTimer(UINT_PTR nIDEvent)
+{
+ // TODO: 鍦ㄦ娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ��
+ if (nIDEvent == 1) {
+ ProductionShiftSummary outSummary;
+ if (TryGetShiftSummary(outSummary)) {
+ TRACE("OnTimer outSummary.output.pairsPass:%d\n", outSummary.output.pairsPass);
+ }
+ }
+
+ CDialogEx::OnTimer(nIDEvent);
+}
--
Gitblit v1.9.3