/
klischa
/
AstraScanner2
Обзор
Документация
Войти
/
klischa
/
AstraScanner2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controllers/ProcessingController.h
60 строк
3 KB
k k
fix(critical): destructor deadlock and ProcessingController connect race
13 июл 2026, 23:17
13 июл 2026, 23:17
f9520be
Код
Авторство
О чём код?
#ifndef PROCESSINGCONTROLLER_H #define PROCESSINGCONTROLLER_H #include <QObject> #include <QFuture> #include <functional> #include <vector> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/PolygonMesh.h> #include "../filters/ProcessingTypes.h" class PointCloudFilters; class ProcessingController : public QObject { Q_OBJECT public: using CloudOperation = std::function<pcl::PointCloud<pcl::PointXYZRGB>::Ptr(PointCloudFilters*)>; using MeshOperation = std::function<pcl::PolygonMesh(PointCloudFilters*)>; explicit ProcessingController(QObject *parent = nullptr); PointCloudFilters *filters() const { return m_filters; } void runCloudOperation(QObject *receiver, const CloudOperation &operation, const std::function<void(pcl::PointCloud<pcl::PointXYZRGB>::Ptr)> &onFinished, const std::function<void()> &onCanceled = {}); void runMeshOperation(QObject *receiver, const MeshOperation &operation, const std::function<void(const pcl::PolygonMesh &)> &onFinished, const std::function<void()> &onCanceled = {}); void runReconstruction(QObject *receiver, const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &snapshot, const AstraPoissonParams ¶ms, const std::function<void(const pcl::PolygonMesh &)> &onFinished, const std::function<void()> &onCanceled = {}); void runMergeScans(QObject *receiver, const std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> &scans, const AstraMergeParams ¶ms, const std::function<void(pcl::PointCloud<pcl::PointXYZRGB>::Ptr)> &onFinished, const std::function<void()> &onCanceled = {}); bool isReconstructionRunning() const { return m_reconstructionFuture.isRunning(); } bool isMergeRunning() const { return m_mergeFuture.isRunning(); } void cancelAll(); void waitForOperations(); signals: void progressUpdated(int percentage); void filterCompleted(const QString &filterName, int pointsBefore, int pointsAfter); private: PointCloudFilters *m_filters = nullptr; QFuture<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> m_pendingCloudFuture; QFuture<pcl::PolygonMesh> m_pendingMeshFuture; QFuture<pcl::PolygonMesh> m_reconstructionFuture; QFuture<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> m_mergeFuture; }; #endif // PROCESSINGCONTROLLER_H