Eliya/src/Reader/ThreadPool.h

41 lines
881 B
C++

//
// Created by versustune on 24.02.20.
//
#ifndef ELIYA_THREADPOOL_H
#define ELIYA_THREADPOOL_H
#include <queue>
#include <thread>
#include "../Utils/ProgressBar.h"
#include "FileReader.h"
#include "ThreadSafeDeque.h"
struct ThreadQueueItem {
ProgressBar *progressBar = nullptr;
int fileIndex{};
int status{};
FileReader *reader = nullptr;
ThreadQueueItem() = default;
};
class ThreadPool {
private:
int threadCount = 12;
std::vector<std::thread*> threads;
Tsqueue<std::shared_ptr<ThreadQueueItem>> *threadQueue = nullptr;
std::vector<int> finishedThreads;
public:
ThreadPool() = default;
~ThreadPool() = default;
void setQueue(Tsqueue<std::shared_ptr<ThreadQueueItem>> *queue);
void initThreads();
void start(ProgressBar * progressBar);
protected:
void execute(int threadNumber);
};
#endif //ELIYA_THREADPOOL_H