summaryrefslogtreecommitdiff
path: root/src/modinfo.h
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-05-24 13:28:00 +0200
committerMikaël Capelle <capelle.mikael@gmail.com>2020-05-24 13:28:00 +0200
commita284c64dc109797514b4664d37e6b6dc3d5c36c7 (patch)
tree4bdcc262f253912576b932aecc8eccb2ab72f17c /src/modinfo.h
parent9fb639a00e1a809a9ea9b5e68777ec46f534761c (diff)
Update file tree in parallel when loading from disk.
Diffstat (limited to 'src/modinfo.h')
-rw-r--r--src/modinfo.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/modinfo.h b/src/modinfo.h
index b3e75bc4..d3d13d9c 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "imodinterface.h"
#include "versioninfo.h"
+#include "envfs.h"
class PluginContainer;
class QDir;
@@ -839,6 +840,36 @@ protected:
private:
+ struct ModThread
+ {
+ ModInfo::Ptr ptr;
+
+ std::condition_variable cv;
+ std::mutex mutex;
+ bool ready = false;
+
+ void wakeup()
+ {
+ {
+ std::scoped_lock lock(mutex);
+ ready = true;
+ }
+
+ cv.notify_one();
+ }
+
+ void run()
+ {
+ std::unique_lock lock(mutex);
+ cv.wait(lock, [&] { return ready; });
+
+ ptr->isValid();
+ ready = false;
+ }
+ };
+
+ static env::ThreadPool<ModThread> s_Threads;
+
static QMutex s_Mutex;
static std::map<std::pair<QString, int>, std::vector<unsigned int> > s_ModsByModID;
static int s_NextID;