File indexing completed on 2024-05-12 15:57:03

0001 /*
0002  *  SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KISSHAREDTHREADPOOLADAPTER_H
0008 #define KISSHAREDTHREADPOOLADAPTER_H
0009 
0010 #include <QMutex>
0011 #include <QWaitCondition>
0012 
0013 #include <KisSharedRunnable.h>
0014 
0015 class QThreadPool;
0016 
0017 class KRITAGLOBAL_EXPORT KisSharedThreadPoolAdapter
0018 {
0019 public:
0020     KisSharedThreadPoolAdapter(QThreadPool *parentPool);
0021     ~KisSharedThreadPoolAdapter();
0022 
0023     void start(KisSharedRunnable *runnable, int priority = 0);
0024     bool tryStart(KisSharedRunnable *runnable);
0025 
0026     bool waitForDone(int msecs = -1);
0027 
0028 private:
0029     friend class KisSharedRunnable;
0030     void notifyJobCompleted();
0031 
0032     KisSharedThreadPoolAdapter(KisSharedThreadPoolAdapter &rhs) = delete;
0033 
0034 private:
0035     QThreadPool *m_parentPool;
0036     QMutex m_mutex;
0037     QWaitCondition m_waitCondition;
0038     int m_numRunningJobs;
0039 };
0040 
0041 #endif // KISSHAREDTHREADPOOLADAPTER_H