Как использовать возвращаемые значения из функтора с boost :: thread - PullRequest
0 голосов
/ 14 марта 2012

Если у меня есть такой функтор ...

class DoStuff {

  private:

    std::vector < int > numericStuff;

  public:

    explicit DoStuff (const std::vector <int> &newStuff) : numericStuff (newStuff) {};

    int operator () (void) {

       int ProcessedStuff = 0;

       //...Doing stuff

       return ProcessedStuff;

    };

};

... теперь, если бы я хотел использовать его как обычно, все, что мне нужно было бы сделать, это ...

//...Vector declared and populated somewhere else
DoStuff stuff (Vector);
int someNumber = stuff();

... и вот, пожалуйста. То, что я хочу сделать, это бросить его в boost :: thread, как это ...

DoStuff stuff (Vector);
boost::thread (stuff);

... а потом воспользуюсь им, но для жизни я не могу понять как. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 15 марта 2012

Вы не можете сделать это.Чтобы «вернуть значение» из потока, вы должны использовать Futures .Цитирование из приведенной выше документации:

Когда вызывается упакованная задача, она по очереди вызывает содержащуюся функцию и заполняет будущее возвращаемым значением. Это ответ на постоянный вопрос: «Как мне вернуть значение из потока?» : упаковать функцию, которую вы хотите запустить, как boost :: packaged_task и передать упакованную задачу в конструктор потока,Будущее, полученное из упакованной задачи, может затем использоваться для получения возвращаемого значения.Если функция выдает исключение, оно сохраняется в будущем вместо возвращаемого значения.

...