qsharedmemory 예제

이 성공하면 공유 메모리 응용 프로그램에서 만든 공유 메모리 세그먼트에 연결하려고 합니다. 이를 위해 이 예제에서 하드 코딩된 공유 메모리 세그먼트의 키가 필요합니다: 경고: QSharedMemory는 달리 명시되지 않는 한 Qt특정 방식으로 키를 변경합니다. Qt가 아닌 응용 프로그램과의 상호 운용은 먼저 QSharedMemory()를 사용하는 기본 공유 메모리를 만든 다음 setNativeKey()를 사용하여 기본 키를 설정하여 수행됩니다. 네이티브 키를 사용하는 경우 공유 메모리는 여러 액세스(예: lock()를 사용할 수 없음)에 대해 보호되지 않으며 이러한 보호를 위해 사용자 정의 메커니즘을 사용해야 합니다. 파일에서 이미지 로드를 클릭합니다… 대화 상자 중 하나에 있는 단추를 누를 수 있습니다. loadFromFile() 슬롯이 호출됩니다. 먼저 공유 메모리 세그먼트가 프로세스에 이미 연결되어 있는지 여부를 테스트합니다. 그렇다면 해당 세그먼트가 프로세스에서 분리되므로 예제를 올바르게 시작할 수 있습니다. 공유 메모리 예제에서는 QSharedMemory 클래스를 사용하여 공유 메모리를 사용하여 프로세스 간 통신을 구현하는 방법을 보여 주며 있습니다. 예제를 빌드하려면 make를 실행합니다.

예제를 실행하려면 실행 의 두 인스턴스를 시작합니다. main() 함수는 응용 프로그램과 예제의 대화 클래스의 인스턴스를 만듭니다. 대화 상자가 표시되고 컨트롤이 표준 방식으로 응용 프로그램에 전달됩니다. 다음으로 이미지는 QDataStream을 사용하여 QBuffer로 스트리밍됩니다. 이렇게 하면 크기가 제공되어 공유 메모리 세그먼트를 만드는 데 사용합니다. 공유 메모리 세그먼트를 만들면 세그먼트가 프로세스에 자동으로 연결됩니다. 여기서 QBuffer를 사용하면 이미지 데이터에 대한 포인터를 얻을 수 있으며 QBuffer에서 공유 메모리 세그먼트로 memcopy()를 수행하는 데 사용합니다. setKey()로 할당된 키를 이 공유 메모리에 반환하거나 키가 할당되지 않았거나 세그먼트에서 nativeKey()를 사용하는 경우 null 키를 반환합니다. 키는 공유 메모리 세그먼트를 식별하기 위해 Qt 응용 프로그램에서 사용하는 식별자입니다. key()를 호출하여 플랫폼 독립 키를 검색할 수 있습니다. 내부적으로 QSharedMemory는 이 키를 플랫폼 특정 키로 변환합니다.

대신 nativeKey()를 호출하면 플랫폼별 변환된 키를 얻게 됩니다. 공유 메모리 세그먼트에서 프로세스를 분리합니다. 공유 메모리 세그먼트에 연결된 마지막 프로세스인 경우 공유 메모리 세그먼트가 시스템에서 해제됩니다( 즉, 내용이 소멸됨). 이 함수는 공유 메모리 세그먼트를 분리하면 true를 반환합니다. false를 반환하는 경우 일반적으로 세그먼트가 연결되지 않았거나 다른 프로세스에 의해 잠겨 있다는 것을 의미합니다. 생성자 또는 setKey() 또는 setNativeKey()에 대한 호출에 전달된 키로 식별된 공유 메모리 세그먼트에 프로세스를 연결하려고 시도합니다. 액세스 모드는 기본적으로 ReadWrite입니다. ReadOnly일 수도 있습니다.

연결 작업이 성공하면 true를 반환합니다. false가 반환되면 error()를 호출하여 발생한 오류를 확인합니다. 공유 메모리 세그먼트를 연결한 후 data()를 호출하여 공유 메모리에 대한 포인터를 가져올 수 있습니다. 크립토 에 이르렀습니다. 이에 대한 설명은 다음과 같습니다. 이에 대한 이의 제기는 다음과 같습니다. 이리원으로 의아해한다. 그러나이 경우, 다양한 플랫폼에 의해 공유 메모리의 차이에 대해 잊지 않을 필요가있다. Windows의 경우 , 공유 메모리는 프로그램의 정상적인 완료 및 비상 사태가 끝날 때 해제됩니다.