2013-11-06 3 views
1

Я новичок в многопоточных механизмах программирования и межпроцессного взаимодействия.Прерывание процесса с использованием Boost и многопоточности

У меня есть программа (допустим, А), которая ждет входящих данных через async_receive() в бесконечном цикле.

Теперь я хочу управлять программой A из отдельного процесса (скажем B).

Точнее, я хочу завершить программу A, когда B это сигнализирует. Таким образом, io_service() в программе A будет отменен, и программа A завершится.

Кажется, что я должен определить поток в программе А ждать сигнала от В.

Мой вопрос заключается в том, что как же я могу получить сигнал от B?

Я попытался использовать message_queue (mq) (boost/interprocess/ipc/message_queue). Итак, B ставит сообщение в mq, но как я могу уведомить программу A для чтения данных из mq? Возможно, что mq вызывает обработчик при появлении нового сообщения в en \ dequeued?

Другими словами, я хочу прервать A из B, используя библиотеки Boost. Если бы вы могли дать мне подсказку, вы бы мне очень помогли.

ответ

0

Существует множество способов получить сигнал для отключения от другого процесса, но наилучший подход зависит от вашего приложения.

Если ваше приложение уже принимает входящие соединения, оно может прослушивать интерфейс loopback (localhost), а затем процесс B может подключиться и попросить его отключиться.

Другой подход - создать поток, который ждет на shared condition variable. Когда процесс B хочет завершить процесс A, он может просто уведомить переменную условия, и поток ожидающего процесса A будет просыпаться и делать это.

+0

На самом деле прослушивание обратного адреса не является надежным подходом, поскольку существует вероятность того, что пакет потерян, и поэтому A не реагирует на команду выключения. – Nazgol

+0

Вы можете сообщить о завершении работы по TCP для обеспечения надежности. –

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