2014-01-31 2 views
2

У меня есть вопрос о связи потоков. есть клиент и сервер.Связь между main() и нитью()

сервер:

  1. основного функции- его работы заключается в послушаете порта (TCP связи) и получить команды от клиента
  2. работы потока для передачи видео свободно к клиенту.

клиент:

  1. основной функции- передачи команд на сервер
  2. смотреть резьбовых выставлению

ТСР \ видео часть работает отлично. после основной функции сервера, получил команду от клиента, мне нужно отправить команду в поток видео и отправить обратно с видеопотока на главный сервер «o.k».

проблема заключается в том, чтобы отправлять команды с основного сервера, на видеопоток и наоборот.

его достаточно, что команда будет одна переменная ..

какие-либо идеи? спасибо!

+0

Попробуйте 'человек 2 pipe' –

+0

' сервер Мейн, в видео потоке '--- 'видеопоток' сервера или клиента? –

+0

видеоролик сервера на главный сервер .. – user1673206

ответ

1

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

для более подробной информации о совместно используемой памяти http://www.cs.cf.ac.uk/Dave/C/node27.html

+1

Это потоки в одном процессе, а не разные процессы - память уже по определению. –

+0

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

0

, если нити и одной переменной затем использовать атомную переменную. если объект затем использует блокировку (попробуйте встроить цикл потокового видео и команду блокировки записи внутри основного). если вам нужны команды в очереди, то используйте безопасную совпадающую очередь

Я думаю, что на вашем случае: Я бы сделал это с двумя Wait-free ring buffer из примеров форсирования. Создание одного единственного производителя-потребителя. В одном из продюсеров будет основной потребительский поток другой функции, а другой наоборот. (это похоже на использование двух трубок в unix, но эффективных)

Бескамерный кольцевой буфер обеспечивает механизм ретрансляции объектов из одного потока «производителя» в один «потребительский» поток без каких-либо блокировок. Операции над этой структурой данных «без ожидания», что означает, что каждая операция завершается с постоянным числом шагов. Это делает эту структуру данных подходящей для использования в жестких системах реального времени или для связи с обработчиками прерываний/сигналов.

Wait-free ring buffer

Но если учесть, что я не в курсе вашей ситуации есть может быть больше прав ways.Maybe redesining на всех

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