编码
#ifndef TASKLIST_HPP
#define TASKLIST_HPP
#include <iostream>
#include <string>
#include <fstream>
#include <chrono>
#include <thread>
#include <mutex>
#include <vector>
#include <unordered_map>
#include <unistd.h>
#include "../Helpers/Variables.hpp"
#include "../Helpers/Enums.hpp"
#include "../Helpers/FileMethods.hpp"
#include "../Helpers/DebuggerHelper.hpp"
namespace TaskList {
void StartAlgos(/*bool* isRun, std::vector<std::pair<BYTE, std::vector<BYTE>*>>* list, TaskList* tl*/);
class TaskList{
private:
bool isRun = false;
std::vector<std::pair<BYTE, std::vector<BYTE>*>> list;
std::unordered_map<Enums::settings, std::string>* settings;
public:
TaskList(std::unordered_map<Enums::settings, std::string>* settingsmap){
settings = settingsmap;
}
void Push(std::vector<BYTE>* block){
lu threads = std::stoul((*settings)[Enums::settings::threadlimit]);
while (list.size() >= threads) WaitQueue(); // You shouldn't use more than (cores+1) than you have
listMutex.lock();
list.push_back(std::make_pair(0, block));
listMutex.unlock();
std::thread ff(StartAlgos);
}
void WaitQueue(){
std::this_thread::sleep_for(std::chrono::milliseconds(250));
}
~TaskList() {}
std::vector<std::thread> threadList;
std::mutex listMutex;
};
void StartAlgos(/*bool* isRun, std::vector<std::pair<BYTE, std::vector<BYTE>*>>* list, TaskList* tl*/){
}
}
#endif // TASKLIST_HPP
我无法弄清楚我做错了什么。
你能提出什么问题吗?
链接器找不到 pthread 库(如果您在 linux 下构建,它在 std::thread 的引擎盖下工作)。你需要在你的构建系统中包含这个库。
如果您的构建系统是 cmake,则在主构建脚本中添加一行,并
find_package (Threads)
在调用中target_link_libraries
添加一个变量${CMAKE_THREAD_LIBS_INIT}
。