Я запрограммировал простое приложение телефонии с использованием Gstreamer. Я также использую простые сокеты 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 голосовые пакеты просто отлично, но остальная часть кода (udpReceiver) не исполняется до тех пор, udpSender остановлен, что делает мою телефонию однонаправленный. Мне нужно, чтобы мой signaling.c начал процесс получения, когда выполняется udpSender. Я полагаю, что system()
не обеспечивает такую функциональность. Есть какой-либо способ сделать это?
P.S: Я использую Ubuntu 13,10 OS
'system()' выполняет синхронно, блокируя вызывающий поток. Вы должны разветвить новый процесс или создать отдельный поток для первого вызова 'system' (с' fork' вы можете предпочесть 'execv'' udpSender' и/или ~ 'Receiver' вместо вызова' system() ', который выполняет оболочку, затем просит ее запустить вашу программу).(В качестве альтернативы, если остальная часть вашей программы работает на таком высоком уровне, то вам может не хватать написания сценария оболочки ...) –
Что касается многопоточности или многопроцессорности? –