| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > async+future+уведомление |
| Автор: borisbn 26.2.2012, 09:42 |
| Здравствуйте. Нет ли стандартного способа вызвать функцию по окончании работы функции, переданной в async? Желательно, чтобы в функцию-уведомление передалось бы в качестве параметра возвращаемое значение функции из async. Спасибо. |
| Автор: boostcoder 26.2.2012, 09:55 |
| стандартного - нет. но можно передать свой функциональный объект с operator(), который будет вызывать связанную с ним функцию-уведомитель по завершению функции-задачи. |
| Автор: boostcoder 26.2.2012, 10:20 |
| хотя...вроде бы есть такая возможность, путем использования packaged_task::make_ready_at_thread_exit() но проблема в том, что make_ready_at_thread_exit() еще не реализован. даже декларации нет. но в доках он присутствует: http://www.stdthread.co.uk/doc/headers/future/packaged_task/make_ready_at_thread_exit.html и http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3070.html. |
| Автор: borisbn 27.2.2012, 14:52 | ||
Я тут повелосипедировал немного... Глянешь на досуге ? Покритикуешь ?
http://liveworkspace.org/code/5f5fc2a2f050ee0d953d8d49fddc85b9 |
| Автор: boostcoder 28.2.2012, 14:33 |
| borisbn, так а цель была, уйти от явного использования bind() ? |
| Автор: borisbn 28.2.2012, 14:41 |
Ага. В том числе. Хочу, чтобы мои функции выглядели для пользователя как тот же std::thread или std::async... К тому же если рабочая функция возвращает значение, то функции-уведомлению нужно делать std::bind с placeholder'ом, а если нет - то без него. А так получается единообразно. Ну, а основная цель - сделать async-вызов с уведомлением. В принципе, я её достиг, но меня смущает то, что пользователь должен получать std::future и в конце программы (например, в деструкторе основного класса) ожидать её. Хотелось бы и этот процесс автоматизировать, но я пока не придумал как. Есть идея создать статический глобальный класс, который будет получать эти future'зы, складывать в список, а в своём деструкторе - ждать всех по-очереди... Бррр... самому не нравится |