Ожидание завершения асинхронных операций - PullRequest
1 голос
/ 22 марта 2011

Привет всем!

Есть объект io_service, методы run () работают в пуле потоков.Существует множество классов, которые делают асинхронную запись, используя ip :: tcp :: socket.Мне нужно заблокировать деструктор такого класса, пока его задачи не будут находиться в очереди io_service.Например, добавить метод join ().Но в чем причина блокировать деструктор?

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Решено так: http://liveworkspace.org/code/7665b7170b3311085fff2e84710d4350

Спасибо за все.

0 голосов
/ 22 марта 2011

Я не уверен, правильно ли я понимаю ваш вопрос, но похоже, что вы хотите убедиться, что классы, ожидающие незавершенных асинхронных операций, не будут уничтожены до завершения операции?

Для этой цели может использоваться идиома enable_shared_from_this , которая демонстрируется, например, в http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/tutorial/tutdaytime7/src.html. Если вы посмотрите на tcp_connection :: start, вы увидите, как класс передает shared_ptr себе для привязки в качестве обработчика для асинхронной операции.

...