Лучший способ передать структуру из одного процесса в другой? - PullRequest
2 голосов
/ 18 августа 2011

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

typedef struct tagTDATA {
         BYTE c1;
         DWORD dw1;
         DWORD dw2;
         char ch[255];
} TDATA, *PTDATA;

Не могу использовать Boost. Лучший способ это Win API. И мне не нужно решение кода, просто укажите мне правильное направление. Спасибо.

Ответы [ 5 ]

0 голосов
/ 18 августа 2011

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

0 голосов
/ 18 августа 2011

WM_COPYDATA специально предназначен для передачи структур между процессами. Проверьте это.

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

0 голосов
/ 18 августа 2011

В моем понимании вы можете решить эту проблему, создав общую очередь. Модель вашей проблемы больше похожа на Проблема потребителя производителя

Вы также можете взять эти примеры

0 голосов
/ 18 августа 2011

Находятся ли сервер и клиенты на разных хостах? Если так, почему бы вам не использовать UDP и методы для сериализации вашей структуры для отправки по сети, а второй - для ее возврата в структуру? ...

0 голосов
/ 18 августа 2011

ReadProcessMemory и WriteProcessMemory должны быть в состоянии справиться с задачей за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...