AMcoder - javascript, python, java, html, php, sql

Օգտագործելով thread pool գրադարանը

Ես փորձում եմ օգտագործել 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" );

Ծրագիրը պետք է տպի քնի ժամանակը յուրաքանչյուր թեմայի մեջ անմիջապես այն բանից հետո, երբ յուրաքանչյուր թեմա ավարտի իր աշխատանքը:


  • Ստատիկ փոփոխականի փոխարեն և նշեք getRandom, ինչու՞ պարզապես չանել srand կանչը main ֆունկցիայի մեջ, նախքան որևէ բան անելը: Քանի որ այնպես, ինչպես հիմա է, այն անվտանգ չէ թելի համար: 18.08.2016
  • Շնորհակալություն հուշման համար։ Ես փոխվել եմ! 18.08.2016
  • OT, եթե c++11 տարբերակ է, կարող եք օգտագործել std::to_string(). 18.08.2016

Պատասխանները:


1

Սխալ 1. ֆունկցիայի համընկնում

Համոզված եմ, որ ձեր օգտագործած Windows կոմպիլյատորը չգիտի, որ համապատասխանի const char [9] տիպի տողային բառացի բառը std::stringին, երբ համապատասխանի async-ին: Սա անուղղակի փոխակերպման երկու մակարդակ է, որն անթույլատրելի է:

const char [9] 
--> const char* 
--> std::basic_string<char>(const char* s, const Allocator& alloc = Allocator() );

Ես վստահ չեմ, թե արդյոք կոմպիլյատորը պետք է համարի դա որպես մեկ կամ երկու առանձին անուղղակի փոխակերպում:
Ամեն դեպքում, դուք կարող եք շտկել այն՝ բացահայտորեն փոխակերպելով պարամետրը std::stringի

std::future<string> buff = pool.async( function<string(string)>(getResult), std::string("MyString") );

Սխալ 2. ջնջվածի օգտագործումը...

Օգտագործեք շարժման կոնստրուկտորը: Պատճենային կոնստրուկտորը նշված է որպես ջնջված

results.push_back( std::move(buff) );
18.08.2016
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..