В настоящее время я работаю над проектом игры Bomberman, где должен быть Сервер с двумерной матрицей и 1 или более Клиентов.Общая память - матричное отображение
Способ, которым, по моему мнению, должен быть выполнен, заключается в использовании общей памяти между процессом, когда клиенты и «враги» получают доступ к информации о таблице (матрице) и работают с этим.
Проблема в том, что я не знаю, как сопоставить указатель на мой объект Map (матрица), чтобы другие процессы могли захватить эту информацию.
Я получил эту функцию из MSDN, но я только объяснить строку:
//Server.cpp
//object creation (Matrix)
Mapa M(height, width);
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size(high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not create file mapping object (%d).\n"),
GetLastError());
return 1;
}
**HANDLE hMapFile = &M; // will this work?**
pBuf = (LPTSTR) MapViewOfFile(hMapFile, // <- How can I pass the object here?
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
if (pBuf == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return 1;
}
Пожалуйста, как я могу карту указателя на объект или даже к объекту так другим процессы могут получить доступ?
С уважением,
RC
«CreateFileMapping» - это только один шаг на пути к общей памяти, другой - ['MapViewOfFile'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366761%28v=vs.85%29.aspx) – Diego
Да, но как я могу указать объект матрицы? – falkon21
Этот проект ограничит работу вашего клиента и сервера на том же компьютере. Как правило, клиент и сервер будут работать в отдельных блоках и обмениваться данными через TCP/IP. Почему вы используете общую память? – StilesCrisis