Новый ответ
Но нет механизма (это я
в курсе) что позволяет мне ждать
оба события одновременно (опрос
не может быть и речи). Или это?
Не то, чтобы я знал об этом, и не без опроса ... вам понадобится поток для ожидания каждого асинхронного события. Вы можете использовать блокирующий стек или, как вы сказали, использовать boost::condition_variable
, который блокирует, пока в стеке не окажется что-то. boost::asio::io_service
будет очень полезен для управления сокетами udp, но на самом деле он не дает никаких преимуществ, когда дело доходит до обработки событий.
Старый ответ
Я ДЕЙСТВИТЕЛЬНО не уверен, что ты пытаешься сделать ... то, что ты говоришь, не имеет особого смысла. Я сделаю все возможное, чтобы угадать, что вы пытаетесь сделать, но я бы предложил уточнить вопрос.
Вопрос:
Мне действительно нужно использовать основной
поток для отправки данных через компонент
розетка или я могу сделать это из
новый поток? (Я думаю, что ответ нет,
но я не уверен насчет условий гонки
на розетках)
Ответ:
Вам не нужно использовать основной поток для отправки данных через сокет данного компонента. Теперь, в зависимости от используемой вами библиотеки сокетов, могут быть разные ограничения: вы можете отправлять данные только в том же потоке, в котором был создан сокет, или вы можете отправлять данные из любого потока ... это действительно зависит от реализации вашего сокета.
Вопрос:
как мне ждать обоих событий?
Ответ:
Вы не можете делать две вещи одновременно в одном и том же потоке ... при этом у вас есть два варианта:
- Постоянно опрашивать, чтобы увидеть, произошло ли какое-либо событие (в том же потоке).
- Имеют два потока, которые блокируют, пока не произойдет желаемое событие (обычно, когда вы читаете из сокета, оно блокируется, если нет данных).
Учитывая описание вашей проблемы, неясно, чего бы вы достигли, используя boost::condition_variable
и / или boost::asio::io_service
. Возможно, вы должны дать нам очень простой пример кода, которому мы можем следовать.
Вопрос:
Есть ли другая альтернатива
Решение этой проблемы, что я не
в курсе?
Ответ:
Там всегда есть альтернативные решения, но действительно трудно сказать, какие альтернативы могут быть даны текущее описание «проблемы». Я думаю, что вам следует снова отредактировать проблему и сосредоточиться на предоставлении очень конкретных примеров, возможно, некоторого псевдокода и т. Д.