#ifndef PARALLELDIRSCANNER_H #define PARALLELDIRSCANNER_H #include #include #include #include #include "concurrentqueue.h" class ParallelDirScanner : public QObject { Q_OBJECT protected: QStringList ignorePatterns; QThreadPool threadpool; unsigned int finishedWorkers = 0; unsigned int processedPaths = 0; std::atomic stopToken; bool running = false; QVector paths; ConcurrentQueue targetPathsQueue; ConcurrentQueue resultPathsQueue; unsigned int getThreadsNum() const; public: ParallelDirScanner(); ConcurrentQueue &getResults(); void setIgnorePatterns(QStringList patterns); void setPaths(QVector paths); void scan(); bool isRunning(); unsigned int pathCount(); signals: void scanComplete(); void progress(int, int); public slots: void cancel(); private slots: void handleWorkersProgress(unsigned int progress); void handleWorkersFinish(); }; #endif // PARALLELDIRSCANNER_H