메모리 맵드 파일은 서버가 죽었을 경우, 클라이언트가 이를 감지할 방법이 없었지만
해당 방식은 이를 바로 감지할 수 있는 장점을 제공해준다.

이런 저런 테클을 받아(^^) 여러가지 단위 테스트를 진행해본 결과,
해당 방식이 MMF보다 우월하다고 말하기 힘든 결과가 나왔다..
쓰기는 엇비슷하거나 1-5%정도 향상되었다고 말할 수 있지만, 읽기 속도는 MMF가 수배에서 수십배 빠르게 나타났다.
그냥 이런 방법도 있구나, 생각하고 읽어보자..



자, 그럼 서버가 해야할일은 무엇일까?

MYSTRUCT* pStruct = new MYSTRUCT;
int pid = _getpid(); // 서버PID
int addr = (int)pStruct; // 서버 메모리 주소

준비는 끝났다.. 헉 @.@?

다음으로 클라이언트 프로세스에게 pid 와 addr을 전달하기만 하면된다.
프로세스를 띄울 때 인자로 전달하던, 파일에 쓰던, 메시지를 던지던.. 그건 마음대로 하면 된다.

그렇다면 클라이언트가 해야할일은 멀까?

HANDLE m_hProcess = OpenProcess(PROCESS_VM_READ, FALSE, 서버PID);
ReadProcessMemory(m_hProcess, (LPCVOID)서버메모리주소, &pStruct, sizeof(MYSTRUCT), &ReadBytes);
이걸로 끝이다.

장점1. 서버가 죽으면 ReadProcessMemory 가 실패하기 때문에 바로 알 수 있다.
장점2. 사용이 간편하다? -_-;;;

+ Recent posts