Здравствуйте, гость ( Вход | Регистрация )
kilkinenator | Дата 21.1.2011, 15:51 |
В чем причина? вот этого я не знаю возможно что сокет на это не рассчитан. с другой стороны, async_connect при аналогичных обстоятельствах у меня работает. возможно, если ты приведешь участочки кода, ктонибудь тебе подскажет я тут глянул в примеры... там подобная операция производится через io_service::post(), который производит операцию уже на потоке сервиса |
|
kas | Дата 20.1.2011, 13:45 |
kilkinenator, большое спасибо что откликнулся. Для сервиса я создаю отдельный поток, как ты написал. Меня интересует еще вот такой вопрос : когда для tcp сокета вызывается tcp::socket::async_read_some(...) из потока в котором работает io_service - все хорошо, а когда я делаю тоже самое из другого потока (у нас там QThread) - read_handler(...) не вызывается. В чем причина? |
|
kilkinenator | Дата 18.1.2011, 14:48 |
асинхронное чтение данных (read_handler(...)) для всех сокетов, созданных на сервере, выполняется в том же потоке, что и io_service. Т.е. фактически они все работают в одном потоке. мне кажется, вы не совсем правы. операции выполняются в том же потоке в котором работает io_service::run, поэтому в примерах к asio обычно делают примерно так:
то есть создают новый поток для работы сервиса. З.Ы. дальше есть вариации с несколькими сервисами или их работами в нескольких потоках. как это работает достаточно доходчиво описано в примерах. |
|
kas | Дата 29.12.2010, 20:57 |
Доброго времени суток! Начал разбираться с boost::asio и для примера написал простой клиент и сервер. Клиент в асинхронном режиме отправляет на сервер файл, а сервер принимает данные (асинхронно) и сохраняет их. Все хорошо и все работает. Но асинхронное чтение данных (read_handler(...)) для всех сокетов, созданных на сервере, выполняется в том же потоке, что и io_service. Т.е. фактически они все работают в одном потоке. Мне необходимо чтобы каждое соединение обрабатывалось в своем потоке. Писал подобные вещи с использование Qt, разобрался без проблем. А вот для boost-а никак не получается. Если кто то разбирался с подобной задачей, какие есть варианты ее реализации? Заранее спасибо. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 23.4.2024, 12:36 |