同时运行两个无限进程

时间:2014-01-15 10:16:41

标签: c sockets parallel-processing

我使用Gstreamer编写了一个简单的Telephony应用程序。我还使用一个简单的UDP套接字来进行信令。收到UDP上的特殊消息后,我的Gstreamer将启动并进行传输。 现在有两个进程在信令完成后启动:

处理1:使用麦克风发送语音(在手动停止之前一直运行

我在信令应用程序中使用可执行文件来执行此操作:

if(  ! strcmp(buf,"callee picked up ") ) system("/home/fereydoon/udpSender");

buf是收到的消息,检查是否应该执行udpSender。

流程2:接收和解码传入的包。

if(  ! strcmp(buf,"callee picked up ") ) system("/home/fereydoon/udpReceiver");

当我在我的Signaling.c中包含上面的代码行时,它继续发送UDP语音包就好了,但是在udpSender停止之前,其余代码(udpReceiver)不会被执行,这使我的电话单向。 我需要让我的signaling.c在执行udpSender时启动接收过程。 我想system()没有提供这样的功能。有没有办法做到这一点?

P.S:我正在使用Ubuntu 13.10 OS

3 个答案:

答案 0 :(得分:1)

从描述问题的方式来看,听起来你在工作的软件意义上没有两个独立的过程。只是两个单独的任务。执行时的第一个任务会阻止控制线程,当你想要的是同时运行两个任务时。有两种方法可以做到这一点,但最简单的方法就是将两个任务放在不同的线程中。每个线程将同时运行,并且您的两个任务似乎同时运行。

您可以在此处了解有关C ++中线程的更多信息:http://codebase.eu/tutorial/posix-threads-c/

答案 1 :(得分:1)

问题在于system来电正在阻止。因此,第一次调用system时执行停留块。

您必须使用forkpthreads来并行执行。

更简单的解决方案是使用&

在后台启动可执行文件
if(  ! strcmp(buf,"callee picked up ") ) system("/home/fereydoon/udpSender &");
if(  ! strcmp(buf,"callee picked up ") ) system("/home/fereydoon/udpReceiver &");

答案 2 :(得分:1)

在system()调用结束时添加&符号。

system("/home/fereydoon/udpSender &");

编辑:必须注意,在主应用程序停止后,udpSender进程不会被杀死,必须手动停止或通过向代码添加kill进程来停止。