2016-03-13 2 views
2

У меня есть программа, написанная с использованием Boost.ASIO. Я ищу клиентскую библиотеку C++ XMPP, которая может быть использована с ней, то есть библиотека, которая уже использует Boost.ASIO и которая либо предоставляет свой внутренний экземпляр io_service, либо я могу инициализировать с помощью моего собственного существующего экземпляра io_service, а затем просто вызовите run() на моем io_service.Библиотека XMPP, работающая с Boost.ASIO

Очевидно, что Swiften (https://swift.im/swiften.html) использует Boost внутренне, но я не могу найти пример того, как получить внутренний io_service.

Любой указатель?

+0

Для чего вы _need_ для внутреннего экземпляра io_service? Это - внутреннее_ по причине - модульность и инкапсуляция. Ничто не мешает вам запускать собственный 'io_service' для ваших собственных задач – sehe

+0

Это будет означать создание 2 потоков, которые я бы хотел избежать. – sunmat

+0

У вас есть рациональные причины, по которым вам не нужна дополнительная нить? Я считаю, что если это не так много, это не сильно больно. – sehe

ответ

2

Согласно некоторым фрагментам source code, Swiften использует Boost внутри, но не ASIO. Он использует такие вещи, как shared_ptr, boost::bind, случайный генератор и т. Д., Но не boost::asio.

И согласно источникам, Swift::EventLoop имеет io_service-подобный интерфейс, но не использует его.

Так ответ: нет, вы не можете извлечь io_service из Swiften, так как он не использует boost :: asio.

UPD: Но вы можете использовать Swiften в отдельном потоке в асинхронном режиме, а затем сделать io_service::post на свой собственный eventloop, но вам нужно написать собственную оболочку, обработчики завершения и так далее, чтобы управлять этим.

Смежные вопросы