You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
#include "nmCalculationPebiGridTask.h"
|
|
|
|
#include "nmCalculationPebiGrid.h"
|
|
#include "nmDataAnalyzeManager.h"
|
|
|
|
nmCalculationPebiGridTask::nmCalculationPebiGridTask(
|
|
nmDataAnalyzeManager* pDataManager,
|
|
QObject *parent)
|
|
: QThread(parent),
|
|
m_pDataManager(pDataManager),
|
|
m_bManagerUseActive(false),
|
|
m_bSnapshotValid(false)
|
|
{
|
|
if(m_pDataManager != nullptr) {
|
|
m_pDataManager->beginBackgroundUse();
|
|
m_bManagerUseActive = true;
|
|
|
|
// 第一步:构造函数运行在主线程,此处一次性复制全部 Map 和求解输入。
|
|
// run() 启动后不得再读取 DataManager 中的井、断层或参数对象。
|
|
m_bSnapshotValid =
|
|
nmCalculationPebiGrid::getInstance()->captureInputSnapshot(
|
|
m_pDataManager, m_oInputSnapshot);
|
|
}
|
|
}
|
|
|
|
nmCalculationPebiGridTask::~nmCalculationPebiGridTask()
|
|
{
|
|
if(isRunning()) {
|
|
wait();
|
|
}
|
|
releaseDataManagerUse();
|
|
}
|
|
|
|
void nmCalculationPebiGridTask::run()
|
|
{
|
|
// 第二步:后台只消费不可变快照,所有 DLL 输出和 VTK 数据先保存在任务内部。
|
|
const bool success = m_bSnapshotValid &&
|
|
nmCalculationPebiGrid::getInstance()->calculateSnapshot(
|
|
m_oInputSnapshot, m_oResult);
|
|
// 完成通知可能引起成果窗口销毁,发信号前先解除 DataManager 使用权。
|
|
releaseDataManagerUse();
|
|
// 无论成功或失败都通知窗口,使其可以结束本轮任务状态并处理后续待刷新请求。
|
|
emit pebiGridGenerated(success);
|
|
}
|
|
|
|
bool nmCalculationPebiGridTask::commitResult(
|
|
nmDataAnalyzeManager* pDataManager)
|
|
{
|
|
// 第三步:该方法由网格窗口的主线程槽调用。版本不一致时只丢弃局部结果,
|
|
// 绝不覆盖用户编辑后已经失效或重新生成的网格。
|
|
if(!m_bSnapshotValid || !m_oResult.m_bSucceeded ||
|
|
pDataManager == nullptr) {
|
|
return false;
|
|
}
|
|
|
|
return nmCalculationPebiGrid::getInstance()->commitSnapshotResult(
|
|
pDataManager, m_oInputSnapshot, m_oResult);
|
|
}
|
|
|
|
void nmCalculationPebiGridTask::releaseDataManagerUse()
|
|
{
|
|
if(m_bManagerUseActive && m_pDataManager != nullptr) {
|
|
m_pDataManager->endBackgroundUse();
|
|
m_bManagerUseActive = false;
|
|
}
|
|
}
|