From 9ba4f2e0ccf3ce62ca5c7e43048b397f8e6d11b5 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Wed, 21 Oct 2026 15:48:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(nmNum):=20=E7=A7=BB=E9=99=A4=E7=BD=91?= =?UTF-8?q?=E6=A0=BC=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E5=B9=B6=E5=B1=85?= =?UTF-8?q?=E4=B8=AD=E6=98=BE=E7=A4=BA=E6=B1=82=E8=A7=A3=E8=80=97=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 187462 -> 187431 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 6 ++-- .../nmCalculationDllPebiSolverTask.h | 4 --- .../nmCalculation/nmCalculationPebiGrid.h | 6 ---- Include/nmNum/nmSubWnd/nmSubWndMain.h | 4 --- .../nmCalculationDllPebiSolverTask.cpp | 17 ++------- .../nmCalculation/nmCalculationPebiGrid.cpp | 21 ++--------- Src/nmNum/nmSubWnd/nmSubWndMain.cpp | 34 +++++++----------- 8 files changed, 19 insertions(+), 73 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index b65878ca06b9fc04f4bf56b2739854178837454b..f73a33e2d2849a9e114ce08ca108bfeb54efe743 100644 GIT binary patch delta 13689 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 j%mSjvPmOF68#N))xruH2)nVgE!$r~2Va+^<-Y delta 13673 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求解已完成且结果已提交,但无法打开结果窗口。 - Grid count: %1 -Solve time: %2 ms - 网格数量:%1 -本次求解耗时:%2 ms + Solve time: %1 ms + 本次求解耗时:%1 ms Failed to create sensitivity plot. diff --git a/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h b/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h index 69b37865..6bb745a3 100644 --- a/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h +++ b/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h @@ -52,8 +52,6 @@ class NMCALCULATION_EXPORT nmCalculationDllPebiSolverTask : public QThread { bool wasSuccessful() const; /** @brief 获取本次DLL内部求解耗时,单位为毫秒。 */ int getSolveTimeMs() const; - /** @brief 获取本次求解的PEBI网格数量。 */ - int getPebiCount() const; /** @brief 返回当前代码已识别的失败原因;成功或主动停止时为空。 */ QString getFailureReason() const; /** @brief 请求协作式停止;DLL 正在执行时会在返回后丢弃结果。 */ @@ -207,8 +205,6 @@ class NMCALCULATION_EXPORT nmCalculationDllPebiSolverTask : public QThread { bool m_lastRunSucceeded; ///< run() 保存的执行状态,供等待线程安全读取。 /** @brief 本次DLL内部求解耗时,单位为毫秒。 */ int m_nSolveTimeMs; - /** @brief 本次求解的PEBI网格数量。 */ - int m_nPebiCount; QString m_sFailureReason; ///< 当前代码已识别的首个失败原因。 QString m_sAutoFitTargetWellCode; ///< 自动拟合目标井 WellCode;空值表示保存完整结果。 QVector > m_autoFitResultPressure; ///< 目标井原始压力结果。 diff --git a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h index 35cee7e9..34dad3f4 100644 --- a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h +++ b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h @@ -113,7 +113,6 @@ struct nmPebiGridResult /** @brief 创建空结果;只有 m_bSucceeded 为 true 时才允许提交。 */ nmPebiGridResult() : m_pUnstructuredGrid(nullptr), - m_nPebiCount(-1), m_bSucceeded(false) { } @@ -121,7 +120,6 @@ struct nmPebiGridResult HX_NWTM_GRID_OUTPUT1 m_oGridOutput1; ///< 网格 DLL 主输出。 HX_NWTM_GRID_OUTPUT2 m_oGridOutput2; ///< 网格 DLL 辅助输出。 vtkSmartPointer m_pUnstructuredGrid; ///< 局部构造的 VTK 网格。 - int m_nPebiCount; ///< DLL 返回的 PEBI 单元数量。 bool m_bSucceeded; ///< DLL 和 VTK 转换是否全部成功。 }; @@ -209,7 +207,6 @@ public: quint64 nGridInputRevision, HX_NWTM_GRID_OUTPUT1& oGridOutput1, HX_NWTM_GRID_OUTPUT2& oGridOutput2, - int& nPebiCount, const QAtomicInt* pCancelRequested = NULL) const; /** @brief 主线程快速判断缓存归属和版本,不复制大型 DLL 输出。 */ bool isCurrentGridAvailableFor(const nmDataAnalyzeManager* pDataManager, @@ -220,8 +217,6 @@ public: HX_NWTM_GRID_OUTPUT1 getGridOutput1(); /** @brief 在线程锁保护下返回最近一次网格输出 p2 的副本。 */ HX_NWTM_GRID_OUTPUT2 getGridOutput2(); - /** @brief 返回最近一次网格划分生成的 PEBI 单元数量。 */ - int getPebiCount() const; private: static nmCalculationPebiGrid* m_instance; ///< 进程内共享的 PEBI 网格服务实例。 @@ -229,7 +224,6 @@ private: HX_NWTM_GRID_OUTPUT1 p1; ///< 最近一次网格 DLL 主输出。 HX_NWTM_GRID_OUTPUT2 p2; ///< 最近一次网格 DLL 辅助输出。 double m_dGridControl; ///< 对应 HX_NWTM_GRID_INPUT::GridControl。 - int m_nPebiCount; ///< 最近一次成功网格的单元数量,未生成时为 -1。 quint64 m_nCachedGridInputRevision; ///< 单例 DLL 输出对应的网格输入版本。 /** @brief 当前单例缓存所属的数据管理器,不拥有对象。 */ nmDataAnalyzeManager* m_pDataManager; diff --git a/Include/nmNum/nmSubWnd/nmSubWndMain.h b/Include/nmNum/nmSubWnd/nmSubWndMain.h index 1134376d..b66a3399 100644 --- a/Include/nmNum/nmSubWnd/nmSubWndMain.h +++ b/Include/nmNum/nmSubWnd/nmSubWndMain.h @@ -283,11 +283,9 @@ class NM_SUB_WND_EXPORT nmSubWndMain : public iSubWndBaseFit { void schedulePendingResultWidgets(); // 根据结果页面是否准备成功显示本次求解的最终提示。 void showSolverResultCompletion(bool bResultWindowReady, - int nPebiCount, int nSolveTimeMs); // 先隐藏求解进度框,再排队处理结果界面。 void scheduleSolverResultCompletion(bool bSucceeded, - int nPebiCount, int nSolveTimeMs, bool bInputChanged, const QString& sFailureReason); @@ -350,13 +348,11 @@ private: bool m_bPendingResultWidgetRefresh; ///< 正在等待下一轮事件填充首次结果页面。 bool m_bPendingResultCompletionMessage; ///< 首次页面填充后再显示求解结果提示。 bool m_bPendingResultWindowReady; ///< 延迟填充是否成功创建全部结果页面。 - int m_nPendingResultPebiCount; ///< 延迟提示所需的网格数量。 int m_nPendingResultSolveTimeMs; ///< 延迟提示所需的求解耗时。 bool m_bSolverResultCompletionPending; ///< 等待进度框隐藏后处理求解结果。 bool m_bPendingSolverSucceeded; ///< 待处理求解结果是否成功。 bool m_bPendingSolverInputChanged; ///< 输入变化导致本次旧结果被丢弃。 QString m_sPendingSolverFailureReason; ///< 当前代码已识别的待显示失败原因。 - int m_nPendingSolverPebiCount; ///< 待显示的网格数量。 int m_nPendingSolverTimeMs; ///< 待显示的求解耗时。 bool m_bSolverStartPending; ///< 进度框已显示,输入正分批捕获或任务等待启动。 bool m_bSolverCancelRequested; ///< 已向当前任务发送停止请求,忽略后续阶段信号。 diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp index 91fd8f78..7c2b34bd 100644 --- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp @@ -715,7 +715,6 @@ nmCalculationDllPebiSolverTask::nmCalculationDllPebiSolverTask( m_nResultInputRevision(0), m_lastRunSucceeded(false), m_nSolveTimeMs(-1), - m_nPebiCount(-1), m_dPendingScalarMin(0.0), m_dPendingScalarMax(0.0), m_bPendingFullResultReady(false), @@ -774,7 +773,7 @@ nmCalculationDllPebiSolverTask::nmCalculationDllPebiSolverTask( m_bInputSnapshotValid(source.m_bInputSnapshotValid), m_nGridInputRevision(source.m_nGridInputRevision), m_nResultInputRevision(source.m_nResultInputRevision), - m_lastRunSucceeded(false), m_nSolveTimeMs(-1), m_nPebiCount(-1), + m_lastRunSucceeded(false), m_nSolveTimeMs(-1), m_sAutoFitTargetWellCode(source.m_sAutoFitTargetWellCode), m_dPendingScalarMin(0.0), m_dPendingScalarMax(0.0), m_bPendingFullResultReady(false), m_nCancelRequested(0), m_nWasCancelled(0), @@ -854,7 +853,6 @@ bool nmCalculationDllPebiSolverTask::updateSensitivityRun( m_lastRunSucceeded = false; m_sFailureReason.clear(); m_nSolveTimeMs = -1; - m_nPebiCount = -1; // 批量任务的停止标记持续到整次结束,不能在更新下一组时丢失界面的请求。 if(m_pSensitivitySampling.isNull()) { m_nCancelRequested.fetchAndStoreOrdered(0); @@ -1344,7 +1342,6 @@ void nmCalculationDllPebiSolverTask::run() void nmCalculationDllPebiSolverTask::calculateSingleRun() { m_nSolveTimeMs = -1; - m_nPebiCount = -1; bool bSucceeded = false; try { bSucceeded = this->execute(); @@ -1777,15 +1774,12 @@ bool nmCalculationDllPebiSolverTask::captureInputSnapshot( m_pInputSnapshot->m_bMayUseCachedGrid) { HX_NWTM_GRID_OUTPUT1 oGridOutput1; HX_NWTM_GRID_OUTPUT2 oGridOutput2; - int nPebiCount = -1; if(pGridService->copyCurrentGridFor(m_pDataManager, m_nGridInputRevision, oGridOutput1, - oGridOutput2, - nPebiCount)) { + oGridOutput2)) { m_pInputSnapshot->m_oGridResult.m_oGridOutput1 = oGridOutput1; m_pInputSnapshot->m_oGridResult.m_oGridOutput2 = oGridOutput2; - m_pInputSnapshot->m_oGridResult.m_nPebiCount = nPebiCount; m_pInputSnapshot->m_oGridResult.m_bSucceeded = true; } else { m_pInputSnapshot->m_bRequiresGridCalculation = true; @@ -1913,7 +1907,6 @@ bool nmCalculationDllPebiSolverTask::prepareManualInput() m_nGridInputRevision, oGridResult.m_oGridOutput1, oGridResult.m_oGridOutput2, - oGridResult.m_nPebiCount, &m_nCancelRequested)) { oGridResult.m_bSucceeded = true; @@ -1953,11 +1946,6 @@ int nmCalculationDllPebiSolverTask::getSolveTimeMs() const return m_nSolveTimeMs; } -int nmCalculationDllPebiSolverTask::getPebiCount() const -{ - return m_nPebiCount; -} - QString nmCalculationDllPebiSolverTask::getFailureReason() const { return m_pSensitivitySampling.isNull() ? m_sFailureReason : m_sSensitivityFailureReason; @@ -2178,7 +2166,6 @@ bool nmCalculationDllPebiSolverTask::execPebiMode() oModelInput, m_pInputSnapshot->m_oGridInput.m_sLicensePath .toStdString()); - m_nPebiCount = oGridResult.m_nPebiCount; m_nSolveTimeMs = pfnGetSolveTime(); } catch(const std::exception& e) { qWarning() << QString("C++ Exception during HX_NWTM_MODEL call: %1") diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp index bb27ec70..8eae36a1 100644 --- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp @@ -287,8 +287,7 @@ nmCalculationPebiGrid* nmCalculationPebiGrid::getInstance() } nmCalculationPebiGrid::nmCalculationPebiGrid() - : m_nPebiCount(-1), - m_nCachedGridInputRevision(0), + : m_nCachedGridInputRevision(0), m_pDataManager(nullptr) { // 默认值来自HX_NWTM_GRID_INPUT构造函数 @@ -343,7 +342,6 @@ void nmCalculationPebiGrid::clearGridData( p1 = HX_NWTM_GRID_OUTPUT1(); p2 = HX_NWTM_GRID_OUTPUT2(); m_dGridControl = p0.GridControl; - m_nPebiCount = -1; m_nCachedGridInputRevision = 0; m_pDataManager = nullptr; } @@ -353,7 +351,6 @@ bool nmCalculationPebiGrid::copyCurrentGridFor( quint64 nGridInputRevision, HX_NWTM_GRID_OUTPUT1& oGridOutput1, HX_NWTM_GRID_OUTPUT2& oGridOutput2, - int& nPebiCount, const QAtomicInt* pCancelRequested) const { nmInterruptibleMutexLocker oGridLocker; @@ -378,7 +375,6 @@ bool nmCalculationPebiGrid::copyCurrentGridFor( return false; } oGridOutput2 = p2; - nPebiCount = m_nPebiCount; return true; } @@ -927,12 +923,6 @@ HX_NWTM_GRID_OUTPUT2 nmCalculationPebiGrid::getGridOutput2() return p2; } -int nmCalculationPebiGrid::getPebiCount() const -{ - QMutexLocker oLocker(&s_oPebiGridMutex); - return m_nPebiCount; -} - vtkSmartPointer nmCalculationPebiGrid::createPebiUnstructuredGrid( const HX_NWTM_GRID_OUTPUT1& P1, const QAtomicInt* pCancelRequested) @@ -1862,15 +1852,10 @@ bool nmCalculationPebiGrid::calculateSnapshot( return false; } - typedef int (*GetIntValueFunc)(); - HX_NWTM_GRID_Func pfnGenerateGrid = reinterpret_cast( GetProcAddress(hGridModule, "HX_NWTM_GRID")); - GetIntValueFunc pfnGetPebiCount = - reinterpret_cast( - GetProcAddress(hGridModule, "getPEBInum")); - if(pfnGenerateGrid == nullptr || pfnGetPebiCount == nullptr) { + if(pfnGenerateGrid == nullptr) { qWarning() << "Failed to resolve HX_NWTM grid functions. Error code:" << GetLastError(); FreeLibrary(hGridModule); @@ -1892,7 +1877,6 @@ bool nmCalculationPebiGrid::calculateSnapshot( return false; } nmCalculationUtils::cleanupPebiGridDebugFiles(); - oResult.m_nPebiCount = pfnGetPebiCount(); // 后续 VTK 构造只读取本次局部输出,无需继续占用进程级 DLL 锁。 FreeLibrary(hGridModule); @@ -1949,7 +1933,6 @@ void nmCalculationPebiGrid::commitOutputCache( p1 = oResult.m_oGridOutput1; p2 = oResult.m_oGridOutput2; m_dGridControl = oSnapshot.m_oGridInput.GridControl; - m_nPebiCount = oResult.m_nPebiCount; m_nCachedGridInputRevision = oSnapshot.m_nGridInputRevision; m_pDataManager = pDataManager; } diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp index ec4e73e2..d20c8523 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp @@ -214,12 +214,10 @@ nmSubWndMain::nmSubWndMain(QWidget *parent, QString sExt) : m_bPendingResultWidgetRefresh = false; m_bPendingResultCompletionMessage = false; m_bPendingResultWindowReady = false; - m_nPendingResultPebiCount = -1; m_nPendingResultSolveTimeMs = -1; m_bSolverResultCompletionPending = false; m_bPendingSolverSucceeded = false; m_bPendingSolverInputChanged = false; - m_nPendingSolverPebiCount = -1; m_nPendingSolverTimeMs = -1; m_bSolverStartPending = false; m_bSolverCancelRequested = false; @@ -2739,7 +2737,6 @@ void nmSubWndMain::continueSolverInputCapture() m_pSolverFitting = nullptr; } else { scheduleSolverResultCompletion(false, - -1, -1, bInputChanged, sFailureReason); @@ -2951,7 +2948,6 @@ bool nmSubWndMain::mergeAnaResultToFitting() m_pPendingResultFitting = nullptr; m_bPendingResultCompletionMessage = false; m_bPendingResultWindowReady = false; - m_nPendingResultPebiCount = -1; m_nPendingResultSolveTimeMs = -1; if(pInstance->getGridType() == NM_Grid_PEBI) { @@ -3048,14 +3044,11 @@ void nmSubWndMain::showPendingSolverResultCompletion() } const bool bResultWindowReady = m_bPendingResultWindowReady; - const int nPebiCount = m_nPendingResultPebiCount; const int nSolveTimeMs = m_nPendingResultSolveTimeMs; m_bPendingResultCompletionMessage = false; m_bPendingResultWindowReady = false; - m_nPendingResultPebiCount = -1; m_nPendingResultSolveTimeMs = -1; showSolverResultCompletion(bResultWindowReady, - nPebiCount, nSolveTimeMs); } @@ -3289,7 +3282,6 @@ bool nmSubWndMain::on_calculationFinished( void nmSubWndMain::scheduleSolverResultCompletion( bool bSucceeded, - int nPebiCount, int nSolveTimeMs, bool bInputChanged, const QString& sFailureReason) @@ -3299,7 +3291,6 @@ void nmSubWndMain::scheduleSolverResultCompletion( m_bPendingSolverSucceeded = bSucceeded; m_bPendingSolverInputChanged = bInputChanged; m_sPendingSolverFailureReason = sFailureReason; - m_nPendingSolverPebiCount = nPebiCount; m_nPendingSolverTimeMs = nSolveTimeMs; // 当前完成信号栈只登记后续工作;隐藏和结果刷新各占一轮独立事件。 @@ -3323,13 +3314,11 @@ void nmSubWndMain::completePendingSolverResult() const bool bSucceeded = m_bPendingSolverSucceeded; const bool bInputChanged = m_bPendingSolverInputChanged; const QString sFailureReason = m_sPendingSolverFailureReason; - const int nPebiCount = m_nPendingSolverPebiCount; const int nSolveTimeMs = m_nPendingSolverTimeMs; m_bSolverResultCompletionPending = false; m_bPendingSolverSucceeded = false; m_bPendingSolverInputChanged = false; m_sPendingSolverFailureReason.clear(); - m_nPendingSolverPebiCount = -1; m_nPendingSolverTimeMs = -1; bool bResultWindowReady = false; @@ -3356,11 +3345,9 @@ void nmSubWndMain::completePendingSolverResult() m_bPendingResultWidgetRefresh) { // 首次结果页尚未填充,最终提示必须等页面真实创建结果返回后再显示。 m_bPendingResultCompletionMessage = true; - m_nPendingResultPebiCount = nPebiCount; m_nPendingResultSolveTimeMs = nSolveTimeMs; } else if(bSucceeded) { showSolverResultCompletion(bResultWindowReady, - nPebiCount, nSolveTimeMs); } @@ -3373,14 +3360,21 @@ void nmSubWndMain::completePendingSolverResult() void nmSubWndMain::showSolverResultCompletion( bool bResultWindowReady, - int nPebiCount, int nSolveTimeMs) { - if(bResultWindowReady && nPebiCount >= 0 && nSolveTimeMs >= 0) { - QMessageBox::information(this, tr("Solver completed"), - tr("Grid count: %1\nSolve time: %2 ms") - .arg(nPebiCount) - .arg(nSolveTimeMs)); + // 完成提示只显示 DLL 返回的本次求解耗时。 + if(bResultWindowReady && nSolveTimeMs >= 0) { + QMessageBox oMessageBox(QMessageBox::Information, tr("Solver completed"), + tr("Solve time: %1 ms").arg(nSolveTimeMs), + QMessageBox::Ok, this); + // 单行耗时在提示区域水平、垂直居中,与左侧图标对齐。 + QLabel* pMessageLabel = oMessageBox.findChild("qt_msgbox_label"); + if(pMessageLabel != nullptr) { + pMessageLabel->setAlignment(Qt::AlignCenter); + pMessageLabel->setMinimumHeight( + oMessageBox.iconPixmap().height()); + } + oMessageBox.exec(); } else if(!bResultWindowReady) { QMessageBox::warning( this, @@ -3398,7 +3392,6 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed) return; } - int nPebiCount = pTask != nullptr ? pTask->getPebiCount() : -1; int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1; const bool bCancelled = pTask->wasCancelled(); QString sFailureReason = pTask->getFailureReason(); @@ -3437,7 +3430,6 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed) m_bSolverCancelRequested = false; } else { scheduleSolverResultCompletion(isSuccessed, - nPebiCount, nSolveTimeMs, bInputChanged, sFailureReason);