Boost: запустить и забыть вызов асинхронной функции? - PullRequest
5 голосов
/ 01 октября 2008

Я хотел бы вызвать вызов функции в один прием. Какой лучший способ сделать это в Boost / C ++?

Я хотел бы передать ему два параметра и не нуждаться в результате.

Ответы [ 4 ]

3 голосов
/ 01 октября 2008

Ну, вы можете раскрутить поток, а затем никогда не присоединяться к нему снова. Что-то вроде:

boost::thread some_thread(&SomeFunction, param1, param2);

Как только переменная some_thread выйдет из области видимости, поток выполнения будет отключен и не сможет снова присоединиться. Впрочем, растягивать нить - пустая трата времени, если только время обработки этой функции не является значительным.

3 голосов
/ 01 октября 2008

Некоторое время я не использовал boost :: thread, но на странице документации я вижу быстрый пример для класса :

void find_the_question(int the_answer);

boost::thread deep_thought_2(find_the_question,42);

Я полагаю, что как только функция завершит работу, поток завершится. Это может быть не тем, что вам нужно, поскольку, как только поток выходит из области видимости, он будет уничтожен. Если это не сработает, вам, вероятно, нужно создать пул потоков с длительным сроком действия, а затем передать функторы как композиции boost :: bind.

1 голос
/ 01 октября 2008

В зависимости от того, как часто вы это делаете, лучше всего создать пул потоков вместе с рабочей очередью. Создание потока может создать много накладных расходов, если вы пытаетесь делать это десятки раз в секунду. Если вас не волнует возвращаемое значение, это делает его действительно простым.

раскрутить нить или две (или десять); иметь потокобезопасную очередь функторов для вызова (свяжите параметры с функцией и поместите их в очередь); потоки ожидают в очереди, чтобы что-то появилось, первый проснувшийся поток обрабатывает работу. Когда поток завершает выполнение задания, он снова ждет в очереди.

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

Конечно, если вы делаете асинхронные вызовы каждые пару секунд, чтобы улучшить отзывчивость пользовательского интерфейса, проще будет каждый раз запускать новый поток.

0 голосов
/ 01 октября 2008

Возможно, вы хотите испустить сигнал?

Мне очень понравилась функциональность сигналов и слотов в Qt, и я знаю, что в Boost также есть сигналы / слоты. Я никогда не использовал сигналы / слоты в Boost.

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