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

Windows Interprocess Communication (2 стр)

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

asvp
> Events.
> Всё остальное (мютексы и т.п. тормозить систему будут).
Ты о каких Events? Если ты про CreateEvent, то оно будет более тормозное, чем мьютекс

#16
12:52, 16 фев 2015

StiX
> Если ты про CreateEvent, то оно будет более тормозное, чем мьютекс
O_o. Где об этом написано?

Разница тока в этом:

Объект-мьютекс отличается от остальных объектов ядра тем, что занявшему его потоку передаются права на владение им. Прочие объекты могут быть либо свободны, либо заняты — вот, собственно, и все. А объекты-мьютексы способны еще и запоминать, какому потоку они принадлежат.

Но перед тем как юзать Events, нужно синхронизацию делать через Interlocked, чтобы меньше было переключений в режим ядра.

#17
14:45, 16 фев 2015

Kartonagnick
> http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess.html
вот уж из-за какой-то ерунды буст тянут - это 100% оверкилл на ровном месте.


0iStalker
> А если через #pragma data_seg ?
к shared memory необходимо будет пришлёпывать дополнительную синхронизацию. поэтому проще всего, вероятно, вместо этого будет сделать либо пайп, либо сокет.

#18
14:47, 16 фев 2015

Suslik
Я за сокеты. Это тебе еще добавит возможность запускать приложения на разных машинах.

#19
14:51, 16 фев 2015

Suslik
> к shared memory необходимо будет пришлёпывать дополнительную синхронизацию.
Стандартного мютекса вполне хватит.

> вот уж из-за какой-то ерунды буст тянут - это 100% оверкилл на ровном месте.
> вместо этого будет сделать либо пайп, либо сокет.
А пускать такую ерунду в пайп или сокет- ИМХО тоже оверкилл.
Да и писанины с сокет больше.

#20
14:55, 16 фев 2015

Suslik
Рихтера почитай  "Совместный доступ процессов к данным через механизм проецирования"

В Windows всегда было много механизмов, позволяющих приложениям легко и быстро разделять какие-либо данные. К этим механизмам относятся RPC, COM, OLE, DDE, оконные сообщения (особенно WM_COPYDATA), буфер обмена, почтовые ящики, сокеты и т.д. Самый низкоуровневый механизм совместного использования данных на одной машине — проецирование файла в память. На нем так или иначе базируются все перечисленные мной механизмы разделения данных. Поэтому, если Вас интересует максимальное быстродействие с минимумом издержек, лучше всего применять именно проецирование.

#21
19:49, 16 фев 2015

Suslik
> Поэтому вопрос: какую технологию выбрать для передачи данных под виндой, чтобы
> она была наименее экзотичной?
Я использую shared memory. Ничего экзотичного, всё примитивно и просто, вот код:

// процесс номер 1
//
HANDLE hGuiFile   = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, FILE_SIZE_IN_BYTES, "MySharedMemory"); 
char* sharedMem   = (char*)MapViewOfFile(hGuiFile,   FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0);

// процесс номер 2
//
HANDLE  hSharedMessages  = OpenFileMappingA(FILE_MAP_WRITE | FILE_MAP_READ, false, "MySharedMemory");
char* messages  = (char*)MapViewOfFile(hSharedMessages, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0); 
#22
22:52, 16 фев 2015

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

#23
23:30, 16 фев 2015

Suslik
+1, за сокеты, есть еще такие вещи как ZeroMQ и аналоги, но для IPC это наверное overkill

#24
0:20, 17 фев 2015

Я бы тоже сокеты посоветовал, тем более, что в SFML уже есть готовый фрейминг для TCP (если он в данном случае нужен, конечно).
ZeroMQ/nanomsg будет более гибко (куча разных транспортов и возможных топологий), если не пугает дополнительная зависимость.

#25
5:05, 17 фев 2015

Suslik
> действительно, всё просто, но дополнительно нужно делать синхронизацию чем-то другим, причём межпроцессным.
Стандартный мютекс же.
// процесс номер 1
//
HANDLE  hLockShared = CreateMutex(nullptr, false,  "MySharedMemoryLock");

// процесс номер 2
//
HANDLE  hLockShared = OpenMutex(MUTEX_ALL_ACCESS, false, "MySharedMemoryLock"));

Кода на 3 строчки.

#26
12:13, 17 фев 2015

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365780(v=vs.85).aspx

#27
12:17, 17 фев 2015

Если этим будут пользоваться и поддерживать другие (непонятно кто), используй сокеты - с ними многие знакомы.
Если делать эффективно - используй мапинг.
Если делать быстро - пайпы.

А вообще, главное делать рабочий вариани, потомки-джуны все равно зафукают ;)

#28
17:36, 17 фев 2015

Была как-то подобная дилемма. Выбрали в итоге сокеты, самый удобный вариант оказался. В нагрузку нахаляву идут, потенциально, кроссплатформа и разнос по разным машинам по необходимости. Но это если нормальная либа есть для работы с сетью, а то с голыми сокетами возиться как-то не очень удобно.

#29
20:01, 17 фев 2015

Suslik
> вот уж из-за какой-то ерунды буст тянут - это 100% оверкилл на ровном месте.

Это - кросс-платформа с вменяемым дизайном использования.

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

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