41 lines
881 B
C++
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
|