ПрограммированиеФорумОбщее

Windows Interprocess Communication

Страницы: 1 2 3 4 Следующая »
#0
1:51, 16 фев 2015

Всем привет.

Возникла необходимость передать немного данных из одного процесса в другой, оба процесса мои. Необходимо это сделать наиболее безболезненно в первую очередь для программистов, которые будут пользоваться моим кодом. Я знаком и много работал с IPC под юниксами: pipe, fifo, socket'ы, system V ipc(msg queue, shared memory, semaphore'ы), file mapping, signals. К сожалению, мои знания в этой теме гораздо более академические, чем практические - я умею этим пользоваться, но не знаю, что из этого реально применяется. Под виндой вообще имел дело только с сокетами.

Поэтому вопрос: какую технологию выбрать для передачи данных под виндой, чтобы она была наименее экзотичной? Огромного объёма передаваемых данных не требуется, планируется передавать несколько сотен байт в секунду. У меня уже есть зависимость от SFML, который умеет сокеты и мьютексы, наверное, ими было бы удобнее всего воспользоваться, но не overkill ли это? И ещё, как в таком случае избежать проблем с коллизией номеров портов для localhost'а?

#1
2:30, 16 фев 2015

Suslik
Хм, а твои программы окна имеют? Потому что у винды есть стандартный механизм передачи произвольных данных окну другого приложения. Подробнее гляну завтра. Механизм на чистом WinAPI, прост как двери - функция отправки, ну и приём в цикле обработки сообщений окна.

#2
2:37, 16 фев 2015

Bishop
да, я знаю, это через сообщения. но нет, окон нету.

#3
5:02, 16 фев 2015

Suslik
> shared memory
> file mapping
Юзай или то, или другой.
Это самый быстрый способ передачи данных из одного процесса другому.
С shared memory больше возни в плане настроек компилятора и линкера. Смысл в том, что при загрузке DLL или EXE система сразу создает кусок памяти для всех процессов.

С file mapping проще всего. Проще всего организовать очередь сообщений (как на прием так и на передачу). Проще всего реализовать атомарный доступ к данной памяти через Interlocked-функции и Events.
Всё остальное (мютексы и т.п. тормозить систему будут).

#4
5:04, 16 фев 2015

Suslik
> SFML ... но не overkill ли это?
Имхо не больше, чем когда он (SFML) используется для других целей. Зато можно быстро закрыть проблему.

Ну или курить WinAPI :)

А в чём проблема портов? Есть сервер - застолбил для него некий номер и пользуешься.
По факту невозможности открыть/создать порт можно и single-instance сервера поддерживать.

#5
6:06, 16 фев 2015

rcsim
> А в чём проблема портов?
в том, что я не в курсе, как выбрать гарантированно не занятый для сервера.

asvp
какими свойствами оно обладает и как работает я в курсе. как ими пользоваться - разберусь. вопрос в том, что из этого считается использовать нормально.

#6
6:50, 16 фев 2015

Suslik
> вопрос в том, что из этого считается использовать нормально.
Нормально - понятие растяжимое.

Ну если,  socket'ы заюзать ради передачи 100 байт/сек. между процессами на одной машине - это не нормально.
shared memory или file mapping - это нормально. Именно на этом работают остальные IPC.

#7
7:10, 16 фев 2015

пайпы есть CreateNemedPipe

#8
8:59, 16 фев 2015

Suslik
> вопрос в том, что из этого считается использовать нормально.

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

#9
9:14, 16 фев 2015

А если через #pragma data_seg ?

#10
9:17, 16 фев 2015

А вообще, помнится, в одном проекте у нас эмулировался прибор именно через File Mapping, - всё замечательно работало, как с настоящим железом/драйвером. И никаких конфликтов, потому что имя файла сам выбираешь.

#11
9:28, 16 фев 2015

0iStalker
> А если через #pragma data_seg ?
Это относиться к shared memory

#12
9:31, 16 фев 2015

Вообще Pipe наверное лучше всего
а вообще
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx
но есть еще и специфичные вещи типа
https://technet.microsoft.com/ru-ru/library/cc732184.aspx
оно правдо идет отдельной службой, и его нужно включать специально... если я не ошибаюсь

#13
10:00, 16 фев 2015


http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess.html

#14
10:57, 16 фев 2015

Suslik
> о нет, окон нету.
А можно создать, ага. Никаких коллизий портов. Ну а вообще я за именованные пайпы

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.