Ես փորձում եմ օգտագործել Tyler Hardin-ի thread pool դասը: Գրադարանը կարող եք գտնել այստեղ՝ https://github.com/Tyler-Hardin/thread_pool
Իմ կոդը հետևյալն է.
#include "thread_pool.hpp"
#include <windows.h>
#include <iostream>
#include <list>
#include <string>
#include <sstream>
using namespace std;
const int num_threads = 8;
int getRandom(int min, int max)
{
return min + rand() % (max - min);
}
std::string to_string(int val)
{
std::ostringstream ss;
ss << val;
std::string str = ss.str();
return str;
}
string getResult(string param)
{
int time = getRandom(0, 500);
Sleep(time);
return ("Time spend here: " + to_string(time));
}
int main()
{
srand(time(NULL));
thread_pool pool(num_threads);
list<future<string>> results;
for(int i=100; i<=100000; i++)
{
std::future<string> buff = pool.async( function<string(string)>(getResult), "MyString" );
results.push_back( buff );
}
for(auto i=results.begin(); i != results.end(); i++)
{
i->get();
cout << endl;
}
return 0;
}
Բայց ինչ-որ բան կարծես սխալ է, քանի որ ես բախվում եմ հետևյալ սխալների հետ.
error: no matching function for call to 'thread_pool::async(std::function<std::basic_string<char>(std::basic_string<char>)>, const char [9])
error: use of deleted function 'std::future<_Res>::future(const std::future<_Res>&) [with _Res = std::basic_string<char>]'|
Ինչ եմ ես սխալ անում այս զանգում.
std::future<string> buff = pool.async( function<string(string)>(getResult), "MyString" );
Ծրագիրը պետք է տպի քնի ժամանակը յուրաքանչյուր թեմայի մեջ անմիջապես այն բանից հետո, երբ յուրաքանչյուր թեմա ավարտի իր աշխատանքը: