2015-08-13 6 views
0

У меня есть основная программа X, которая получает канал с моей веб-камеры.
Я хочу настроить X в режиме реального времени во время его выполнения.
Я понимаю, что один из распространенных способов сделать это - использовать IPC, например, named-pipes/Unix-сокеты/интернет-сокеты и т. Д. Но я хочу, чтобы каждый вызывающий пользователь должен был отдельно открыть сокет/именованный канал и общаться каждый раз.
Короче говоря, я хочу вспомогательную программу под названием Y, которые я могу использовать следующим образом:Дизайн кода для основной программы + модуль конфигурации

Y set-fps=15 
Y show-frame=true 
Y get-fps (should return 15) 

Я хотел бы играть в эту вспомогательную программу Y в/USR/BIN/* (или, скорее, поместить его в один из $ PATH directoreis), чтобы он исполнялся из командной строки.

Каковы мои возможности для получения этой функции. Мои ограничения таковы:
(i) Программа X может быть либо C++/Python.
(ii) Несколько клиентов могут звонить Y одновременно.

Я полагаю, что такие системы распространены в Linux, где у вас есть программы, такие как nmcli, взаимодействующие с такими сервисами, как network-manager?

+0

Вам по-прежнему нужен какой-то канал IPC между программами Y и X . И если вас беспокоит несколько внешних систем или программ, использующих Y одновременно, вы можете использовать некоторую систему семафоров/мьютексов (большинство операционных систем назвали (общесистемные) семафоры). –

+0

Это звучит неприятно. Я бы рекомендовал переосмыслить дизайн. – EOF

+0

Я предполагаю, что для обработки нескольких клиентов именованные каналы могут быть слишком полезными (так как мне понадобится одна пара для каждого клиента, который пытается подключиться). Я хочу иметь возможность обрабатывать несколько клиентов одновременно с/без блокировки (в зависимости от запроса). – vishal

ответ

0

жаль поставить это сообщение в ответ, я до сих пор не могу комментировать.

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

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

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

Затем в каждом цикле ваша программа X могла читать различные параметры из этого пространства ядра. С другой стороны, каждый клиент, который хочет изменить параметры, также получит доступ к этому пространству ядра и изменит требуемые значения.

Затем вы должны защитить пространство ядра с семафором, для любой записи или операции чтения. (Мьютекс хорошо там, однако вы можете некоторый писатель реализацию/чтения)

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

+0

Я не могу пойти с этим подходом, иначе мне придется всегда проверять, какие значения изменились. И на самом деле моя программа X также, возможно, придется возвращать вывод в программу Y. Так что это не сработает. Спасибо за ваш комментарий. – vishal

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