Я новичок в форсировании программирования, и я искал причину использования io_service::work
, но я не могу понять это; в некоторых моих тестах я удалил его и работает отлично.Зачем использовать io_service :: work?
ответ
Операции io_service::run()
будут выполняться до тех пор, пока выполняются асинхронные операции. Если в любой момент нет ожидающих ожидающих асинхронных операций (или вызываемых обработчиков), вызов run()
будет возвращен.
Однако есть некоторые проекты, которые предпочли бы, чтобы вызов run()
не был завершен до тех пор, пока все работы не будут выполнены, и io_service
явно проинструктирован, что с ним можно выйти. Для этого используется io_service::work
. Создавая объект work
(обычно я делаю это в куче и shared_ptr), io_service считает, что всегда есть что-то ожидающее, и поэтому метод run()
не вернется. Как только я хочу, чтобы служба могла выйти (обычно во время выключения), я уничтожу рабочий объект.
io_service::work
является базовым классом для всех работ, которые могут вывешенные к экземпляру io_service
, например, когда вы работаете с сокетом и запуска асинхронного чтения, на самом деле вы добавляете work
к io_service
. Таким образом, вы обычно не использовать work
напрямую, но есть одно исключения:
io_service::run
вернется, как только нет больше работы, чтобы сделать, поэтому рассмотрит приложение, которое имеет некоторые производитель и потребители тема, производители иногда производят работы и разместите их в потребительских потоках с io_service::post
, но если все будет завершено, то io_service::run
вернется, и, возможно, ваш потребительский поток будет остановлен, поэтому вам потребуется произвольная работа, чтобы поддерживать io_service
занятым, в этом случае вы можете напрямую использовать io_service::work
.
- 1. Зачем нам нужно использовать boost :: asio :: io_service :: work?
- 2. Зачем нам нужен io_service в boost?
- 3. останавливая объект io_service и повышение :: ASIO :: io_service :: работа
- 4. io_service висит на разрушении
- 5. Несколько потоков и повышение io_service
- 6. Boost io_service останавливается?
- 7. Использует уже созданную нить IO_Service
- 8. назначая io_service работать - повышение :: ASIO
- 9. Зачем использовать Mutex для блокировки?
- 10. Зачем использовать «!!!»?
- 11. Правильный синтаксис для присваивания unique_ptr для нового boost :: asio :: io_service :: work object?
- 12. Зачем использовать (function() {....}());
- 13. io_service :: poll_one не детерминированное поведение
- 14. Boost ASIO IO_SERVICE Реализация?
- 15. io_service run in thread
- 16. заблокированные запросы в io_service
- 17. Keep io_service alive
- 18. boost инициализация io_service SIGSEGV
- 19. Зачем использовать @Transactional Jboss Seam
- 20. Capybara: зачем использовать find ('. Class'). Click does not work, но с помощью execute_script будет работать
- 21. boost asio io_service object и нижележащие потоки
- 22. Weblogic work manager
- 23. boost :: asio :: io_service исключает исключение
- 24. Поддерживается ли boost :: asio :: io_service, чтобы его использовать?
- 25. glreadpixels использовать pbo can not work
- 26. Невозможно использовать файл из Zend Frame Work
- 27. boost :: io_service post с использованием лямбда
- 28. Сохранение двух взаимосвязанных объектов asio io_service занятых
- 29. Зачем использовать вложенные классы?
- 30. Зачем использовать document.write?
Уничтожить, используя функцию reset()? – lucastamoios
Обычно, если я использую shared_ptr для работы, тогда да, я вызываю 'reset()' на shared_ptr. –