다음을 통해 공유


문서 잠금

문서 잠금 프로토콜

ACP 기반 애플리케이션에 대한 문서 잠금을 요청하기 위해 TSF 관리자는 ITextStoreACP::RequestLock을 호출합니다. 앵커 기반 애플리케이션의 경우 TSF 관리자는 ITextStoreAnchor::RequestLock을 호출합니다. 애플리케이션은 RequestLock 내에서 ITextStoreACPSink::OnLockGranted(ACP 기반 애플리케이션) 또는 ITextStoreAnchorSink::OnLockGranted(앵커 기반 애플리케이션)를 호출하여 문서 잠금을 부여합니다. 잠금은 OnLockGranted 호출 중에만 유효합니다. OnLockGranted가 반환되면 문서가 잠금 해제된 것으로 간주됩니다.

문서 잠금 유형

읽기 전용 및 읽기/쓰기의 두 가지 유형의 문서 잠금이 있습니다. 읽기 전용 잠금을 사용하면 관리자가 텍스트를 읽을 수 있지만 텍스트를 수정하거나 삽입할 수는 없습니다. 읽기/쓰기 잠금을 사용하면 관리자가 텍스트를 읽고 수정하고 삽입할 수 있습니다. 읽기 전용 잠금은 dwFlags에서 TS_LF_READ 지정하여 요청됩니다. 읽기/쓰기 잠금은 dwFlags에서 TS_LF_READWRITE 지정하여 요청됩니다.

비동기 및 동기 요청

잠금 요청은 동기 또는 비동기일 수 있습니다. 관리자는 dwFlags에서 TS_LF_SYNC 플래그를 사용하여 동기 잠금을 요청합니다. 이 플래그가 없으면 요청이 비동기적입니다.

잠금 부여

RequestLock이 호출되면 응용 프로그램에서 문서가 현재 잠겨 있는지 확인해야 합니다. 문서가 잠겨 있지 않고 잠금을 거부할 다른 이유가 없는 경우 애플리케이션은 phrSession 을 S_OK 설정하고 S_OK 반환해야 합니다.

문서가 잠겨 있고 잠금 요청이 동기적이면 애플리케이션은 phrSession 을 TS_E_SYNCHRONOUS 설정하고 S_OK 반환해야 합니다. 이는 동기 요청을 부여할 수 없음을 나타냅니다.

문서가 잠겨 있고 잠금 요청이 비동기인 경우 애플리케이션은 요청을 큐에 대기하고 phrSession 을 TS_S_ASYNC 설정하고 S_OK 반환해야 합니다. 문서를 사용할 수 있게 되면 애플리케이션은 큐에서 요청을 제거하고 OnLockGranted를 호출해야 합니다. 잠금 요청의 이 큐는 선택 사항입니다. 애플리케이션에서 지원해야 하는 한 가지 시나리오가 있습니다. 문서에 읽기 전용 잠금이 있고 새 잠금 요청이 읽기/쓰기이며 요청이 비동기적이면 애플리케이션이 OnLockGranted 로 호출되어 RequestLock에 대한 재진입 호출이 발생했습니다. 애플리케이션은 phrSession 을 TS_S_ASYNC 설정하고 S_OK 반환해야 합니다. OnLockGranted 호출이 반환되면 애플리케이션은 TS_LF_READWRITE OnLockGranted를 다시 호출하여 업그레이드 요청을 처리해야 합니다.

잠금 적용

애플리케이션은 문서에 대한 액세스를 허용하기 전에 적절한 유형의 잠금이 있는지 확인해야 합니다. 예를 들어 애플리케이션은 ITextStoreACP::GetText 또는 ITextStoreAnchor::GetText 를 계속 진행하기 전에 문서에 읽기 전용 잠금이 있는지 확인해야 합니다. 적절한 잠금이 없으면 애플리케이션은 TF_E_NOLOCK 반환해야 합니다.

텍스트 저장소

ITextStoreACP::RequestLock

ITextStoreACPSink::OnLockGranted

ITextStoreACP::GetText

ITextStoreAnchor::RequestLock

ITextStoreAnchorSink::OnLockGranted

ITextStoreAnchor::GetText