C ++: отводя глаза на реализацию этого сценария - PullRequest
1 голос
/ 06 мая 2010

Я ищу, как реализовать этот сценарий: У меня есть логический код, который находится внутри функции, теперь я хотел бы иметь возможность выполнять эту функцию в отдельном потоке. Теперь, что у меня есть, это грубая реализация этого .. Я просто инициализирую Thread, чтобы в его методе Start / Run я сохранял логику функции. как я могу сделать его более общим? чтобы я мог отправить функцию (возможно указатель на функцию) на общий поток фабрика / пул? в с ++

Ответы [ 2 ]

3 голосов
/ 06 мая 2010

Это шаблон команды. Обычное решение состоит в том, чтобы связать логику в функциональный объект:

class DoSomething {
public:
    // Constructor accepts and stores parameters to be used
    // by the code itself.
    DoSomething(int i, std::string s)
        : i_(i), s_(s) { }

    void operator()() {
        // Do the work here, using i_ and s_
    }

 private:
    int i_;
    std::string s_;
};
0 голосов
/ 07 мая 2010

Посмотрите на boost :: thread и boost :: bind, так как они станут std :: tr1 :: thread и std :: tr1 :: bind.

boost :: thread - небольшой объект, получающий указатель функтора без возвращаемого значения и без аргументов.

Это означает, что указатель на функцию, объявленную как void (*function)(void);, или структура / класс, реализующий void operator()().

Если вы также используете boost :: bind, вы можете адаптировать практически любой функтор, который будет называться void (*functor)(void).

Это настолько гибко, насколько вы можете получить (так как вы можете преобразовать любую функцию или подобный ей объект, вызываемый без параметров, а затем запустить его в своем собственном потоке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...