使用Boost和多线程中断进程

时间:2013-11-06 21:58:55

标签: c++ multithreading boost interrupt

我是多线程编程和进程间通信机制的新手。

我有一个程序(比方说A)在无限循环中通过async_receive()等待传入数据。

现在我想从一个单独的过程控制程序A(比方说B)。

更确切地说,我想在B发信号时终止程序A.这样,程序A中的io_service()将被取消,因此程序A终止。

似乎我应该在程序A中定义一个线程来等待来自B的信号。

我的问题是我怎么能收到B的信号?

我尝试使用message_queue(mq)(boost/interprocess/ipc/message_queue)。那么,B在mq中添加了一条消息,但我如何通知程序A从mq读取数据?可能mq在en \ dequeued中发送新消息时会调用处理程序吗?

换句话说,我想使用Boost库从B中断A.如果你能给我一个提示,你会帮助我很多。

1 个答案:

答案 0 :(得分:0)

有很多方法可以接收从另一个进程关闭的信号,但最好的方法取决于您的应用程序。

如果您的应用程序已经接受传入连接,它可以侦听环回接口(localhost),然后进程B可以连接并要求它关闭。

另一种方法是生成一个等待shared condition variable的线程。当进程B想要关闭进程A时,它只能通知条件变量,并且进程A的等待线程将被唤醒并执行它。