#include <QRunnable>
#include <QReadWriteLock>
+#include <QWaitCondition>
#include <QStringList>
+#include <QMutex>
+#include <QSemaphore>
class AudioFileModel;
class QFile;
~AnalyzeTask(void);
static void reset(void);
- static void getAdditionalFiles(QStringList &fileList);
+ static int getAdditionalFiles(QStringList &fileList);
static unsigned int filesAccepted(void);
static unsigned int filesRejected(void);
static unsigned int filesDenied(void);
static unsigned int filesDummyCDDA(void);
static unsigned int filesCueSheet(void);
+ //Wait until there is a free slot in the queue
+ static bool waitForFreeSlot(volatile bool *abortFlag);
+
signals:
void fileSelected(const QString &fileName);
void fileAnalyzed(const AudioFileModel &file);
+ void progressValChanged(unsigned int);
+ void progressMaxChanged(unsigned int);
protected:
void run(void);
+ void run_ex(void);
private:
enum cover_t
volatile bool *m_abortFlag;
+ static QMutex s_waitMutex;
+ static QWaitCondition s_waitCond;
+ static QSet<unsigned int> s_threadIdx_running;
+ static unsigned int s_threadIdx_next;
+
+ static QSemaphore s_semaphore;
+
static QReadWriteLock s_lock;
- static unsigned __int64 s_threadIdx_created;
- static unsigned __int64 s_threadIdx_finished;
static unsigned int s_filesAccepted;
static unsigned int s_filesRejected;
static unsigned int s_filesDenied;
static unsigned int s_filesDummyCDDA;
static unsigned int s_filesCueSheet;
- static QStringList s_recentlyAdded;
+ static QSet<QString> s_recentlyAdded;
static QStringList s_additionalFiles;
-
+
static unsigned __int64 makeThreadIdx(void);
};