прерывание boost :: asio :: async_receive_from из другого потока - PullRequest
0 голосов
/ 22 июня 2011

Я читаю многоадресный ввод, используя async_receive_from. Таким образом, идея заключается в том, что, когда я обнаружу пробел, я уведомлю другой вспомогательный поток, чтобы запросить / получить сообщения о заполнении пробела. Пока это в работе, основной поток будет продолжать получать и ставить в очередь любые входящие сообщения. Эту часть я могу реализовать. Другой поток может использовать объект waitforsingle, и я могу передать его детали через общую память и уведомить событие, чтобы разбудить его.

Но как только он завершит свою задачу, как мне заставить вспомогательный поток прервать async_receive_from в исходном потоке? И когда он выходит из чтения, он знает, кто прервал его, и тогда он будет знать, что делать дальше?

1 Ответ

1 голос
/ 22 июня 2011

Почему вы используете общую память между потоками?

Кроме того, механизм, который вы должны использовать для выполнения чего-либо в контексте io_service, управляющего сокетом, - post().Вы можете опубликовать любое произвольное событие в io_service, и оно будет выполнено в этом контексте.Очень просто на самом деле ... Поскольку вы звоните async_receive_from, он не блокируется, то есть io_service может отправлять другие события, поэтому post будет работать.

...