我使用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
答案 0 :(得分:1)
从描述问题的方式来看,听起来你在工作的软件意义上没有两个独立的过程。只是两个单独的任务。执行时的第一个任务会阻止控制线程,当你想要的是同时运行两个任务时。有两种方法可以做到这一点,但最简单的方法就是将两个任务放在不同的线程中。每个线程将同时运行,并且您的两个任务似乎同时运行。
您可以在此处了解有关C ++中线程的更多信息:http://codebase.eu/tutorial/posix-threads-c/
答案 1 :(得分:1)
问题在于system
来电正在阻止。因此,第一次调用system
时执行停留块。
更简单的解决方案是使用&
:
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进程来停止。