문제

C ++ 클래스를 작성하여 두 개 이상의 Windows 프로세스 사이의 인스턴스를 공유해야합니다. 이것을하는 다양한 방법은 무엇입니까?

처음에 나는 조사했다 #pragma data_seg 수업이나 힙에 할당하는 것과 함께 작동하지 않는다는 것을 깨달았을 때만 실망합니다.

기존의 완전한 응용 프로그램이 이미이 DLL을 사용하므로 클래스의 인스턴스는 DLL을 통해 액세스 할 수 있어야합니다.

도움이 되었습니까?

해결책

잠재적으로 사용할 수 있습니다 메모리 매핑 파일 프로세스간에 데이터를 공유합니다. 객체에서 기능을 호출 해야하는 경우 COM 또는 유사한 것을 사용해야하거나 자신의 RPC 프로토콜을 구현해야합니다.

다른 팁

들여다보다 부스트 :: 간호사. 익숙해지는 데 약간의 시간이 걸리지 만 매우 잘 작동합니다. 공유 메모리에서 비교적 복잡한 데이터 구조를 만들어 프로세스간에 잘 작동했습니다.

편집 : 메모리 매핑 된 파일도 작동합니다. 요점은 구조화 된 방식으로 데이터를 사용할 수 있다는 것입니다. 메모리 블록 (파일 또는 공유 메모리)을 유효한 상태로 떠나려면 신중하게 읽고 쓰기가 필요한 원시 데이터로 처리 할 필요가 없습니다. Boost :: Intercrocess는 그 부분을 처리하고 나무, 목록 등과 같은 STL 컨테이너를 사용할 수 있습니다.

새로운 배치를 사용하여 공유 메모리 영역에서 개체를 만들 수 있습니다. 객체가 포인터를 사용하지 않는 한 괜찮을 것입니다.

포드입니까 아니면 프로세스에서 단일 인스턴스를 공유 할 수 있어야합니까? 싱글 톤 패턴 (스레드 안전상의 이유로 정적 초기화 버전) 사용을 고려해 보셨습니까? 동시 쓰기와 물건을 보호하기 위해 Mutxes를 사용해야합니다.

Windows에서는 com도 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top