다음을 통해 공유


COleMessageFilter 클래스

OLE 애플리케이션의 상호 작용으로 요구되는 동시성을 관리합니다.

구문

class COleMessageFilter : public CCmdTarget

멤버

공용 생성자

속성 설명
COleMessageFilter::COleMessageFilter COleMessageFilter 개체를 생성합니다.

공용 메서드

이름 설명
COleMessageFilter::BeginBusyState 애플리케이션을 사용 중 상태로 설정합니다.
COleMessageFilter::EnableBusyDialog 호출된 애플리케이션이 사용 중일 때 나타나는 대화 상자를 사용하거나 사용하지 않도록 설정합니다.
COleMessageFilter::EnableNotRespondingDialog 호출된 애플리케이션이 응답하지 않을 때 나타나는 대화 상자를 사용하거나 사용하지 않도록 설정합니다.
COleMessageFilter::EndBusyState 애플리케이션의 사용 중인 상태를 종료합니다.
COleMessageFilter::OnMessagePending OLE 호출이 진행 중인 동안 메시지를 처리하기 위해 프레임워크에서 호출됩니다.
COleMessageFilter::Register 메시지 필터를 OLE 시스템 DLL에 등록합니다.
COleMessageFilter::Revoke OLE 시스템 DLL을 사용하여 메시지 필터의 등록을 취소합니다.
COleMessageFilter::SetBusyReply OLE 호출에 대한 사용 중인 애플리케이션의 회신을 결정합니다.
COleMessageFilter::SetMessagePendingDelay 애플리케이션이 OLE 호출에 대한 응답을 기다리는 시간을 결정합니다.
COleMessageFilter::SetRetryReply 통화 중인 애플리케이션에 대한 호출 애플리케이션의 회신을 결정합니다.

설명

COleMessageFilter 클래스는 OLE 자동화 애플리케이션뿐만 아니라 시각적 편집 서버 및 컨테이너 애플리케이션에도 유용합니다. 호출되는 서버 애플리케이션의 경우 이 클래스를 사용하여 다른 컨테이너 애플리케이션에서 들어오는 호출이 취소되거나 나중에 다시 시도되도록 애플리케이션을 "사용 중"으로 만들 수 있습니다. 호출된 애플리케이션이 사용 중일 때 호출 애플리케이션에서 수행할 작업을 결정하는 데 이 클래스를 사용할 수도 있습니다.

일반적인 사용은 문서 또는 다른 OLE 액세스 가능 개체가 제거될 위험할 때 서버 애플리케이션에서 BeginBusyStateEndBusyState를 호출하는 것입니다. 이러한 호출은 사용자 인터페이스 업데이트 중에 CWinApp::OnIdle에서 수행됩니다.

기본적으로 COleMessageFilter 개체는 애플리케이션이 초기화될 때 할당됩니다. AfxOleGetMessageFilter를 사용하여 검색할 수 있습니다.

고급 클래스입니다. 직접 작업할 필요가 거의 없습니다.

자세한 내용은 서버: 서버 구현 문서를 참조하세요.

상속 계층 구조

CObject

CCmdTarget

COleMessageFilter

요구 사항

헤더: afxole.h

COleMessageFilter::BeginBusyState

이 함수를 호출하여 사용 중인 상태를 시작합니다.

virtual void BeginBusyState();

설명

EndBusyState와 함께 작동하여 애플리케이션의 사용 중인 상태를 제어합니다. SetBusyReply 함수는 사용 중일 때 호출 애플리케이션에 대한 애플리케이션의 회신을 결정합니다.

증분 및 EndBusyState 감소는 BeginBusyState 각각 애플리케이션이 사용 중인지 여부를 결정하는 카운터를 호출합니다. 예를 들어 두 번의 호출 BeginBusyState 과 한 번의 호출로 EndBusyState 인해 여전히 사용량이 많은 상태가 됩니다. 사용 중인 상태를 취소하려면 동일한 횟 BeginBusyState 수를 호출 EndBusyState 해야 합니다.

기본적으로 프레임워크는 유휴 처리 중에 사용 중 상태로 전환되며 CWinApp::OnIdle에서 수행됩니다. 애플리케이션이 ON_COMMANDUPDATEUI 알림을 처리하는 동안 유휴 처리가 완료된 후 들어오는 호출은 나중에 처리됩니다.

COleMessageFilter::COleMessageFilter

COleMessageFilter 개체를 만듭니다.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

OLE 호출 중에 메시지 보류 중인 지연이 만료될 때 표시되는 사용 중인 대화 상자를 사용하거나 사용하지 않도록 설정합니다(SetRetryReply 참조).

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

매개 변수

bEnableBusy
"사용 중" 대화 상자를 사용할지 여부를 지정합니다.

COleMessageFilter::EnableNotRespondingDialog

OLE 통화 중에 키보드 또는 마우스 메시지가 보류 중이고 통화 시간이 초과된 경우 표시되는 "응답하지 않음" 대화 상자를 사용하거나 사용하지 않도록 설정합니다.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

매개 변수

bEnableNotResponding
"응답하지 않음" 대화 상자를 사용할지 여부를 지정합니다.

COleMessageFilter::EndBusyState

이 함수를 호출하여 사용 중인 상태를 종료합니다.

virtual void EndBusyState();

설명

BeginBusyState와 함께 작동하여 애플리케이션의 사용 중인 상태를 제어합니다. SetBusyReply 함수는 사용 중일 때 호출 애플리케이션에 대한 애플리케이션의 회신을 결정합니다.

증분 및 EndBusyState 감소는 BeginBusyState 각각 애플리케이션이 사용 중인지 여부를 결정하는 카운터를 호출합니다. 예를 들어 두 번의 호출 BeginBusyState 과 한 번의 호출로 EndBusyState 인해 여전히 사용량이 많은 상태가 됩니다. 사용 중인 상태를 취소하려면 동일한 횟 BeginBusyState 수를 호출 EndBusyState 해야 합니다.

기본적으로 프레임워크는 유휴 처리 중에 사용 중 상태로 전환되며 CWinApp::OnIdle에서 수행됩니다. 애플리케이션이 ON_UPDATE_COMMAND_UI 알림을 처리하는 동안 유휴 처리가 완료된 후 들어오는 호출이 처리됩니다.

COleMessageFilter::OnMessagePending

OLE 호출이 진행 중인 동안 메시지를 처리하기 위해 프레임워크에서 호출됩니다.

virtual BOOL OnMessagePending(const MSG* pMsg);

매개 변수

pMsg
보류 중인 메시지에 대한 포인터입니다.

Return Value

성공하면 0이 아닌 값이고, 실패하면 0입니다.

설명

호출 애플리케이션이 호출이 완료되기를 기다리는 경우 프레임워크는 보류 중인 메시지에 대한 포인터를 사용하여 호출 OnMessagePending 합니다. 기본적으로 프레임워크는 WM_PAINT 메시지를 디스패치하므로 시간이 오래 걸리는 호출 중에 창 업데이트가 발생할 수 있습니다.

활성화되기 전에 등록 호출을 통해 메시지 필터를 등록해야 합니다.

COleMessageFilter::Register

메시지 필터를 OLE 시스템 DLL에 등록합니다.

BOOL Register();

Return Value

성공하면 0이 아닌 값이고, 실패하면 0입니다.

설명

메시지 필터는 시스템 DLL에 등록되어 있지 않으면 효과가 없습니다. 일반적으로 애플리케이션의 초기화 코드는 애플리케이션의 메시지 필터를 등록합니다. 애플리케이션에서 등록한 다른 모든 메시지 필터는 프로그램이 Revoke 호출로 종료되기 전에 해지되어야 합니다.

프레임워크의 기본 메시지 필터는 초기화 중에 자동으로 등록되고 종료 시 해지됩니다.

COleMessageFilter::Revoke

등록 호출로 수행된 이전 등록을 취소합니다.

void Revoke();

설명

프로그램이 종료되기 전에 메시지 필터를 해지해야 합니다.

프레임워크에서 자동으로 만들고 등록하는 기본 메시지 필터도 자동으로 해지됩니다.

COleMessageFilter::SetBusyReply

이 함수는 애플리케이션의 "사용 중인 회신"을 설정합니다.

void SetBusyReply(SERVERCALL nBusyReply);

매개 변수

nBusyReply
COMPOBJ.H에 SERVERCALL 정의된 열거형의 값입니다. 다음 값 중 하나를 가질 수 있습니다.

  • SERVERCALL_ISHANDLED 애플리케이션은 호출을 수락할 수 있지만 특정 호출을 처리하지 못할 수 있습니다.

  • SERVERCALL_REJECTED 애플리케이션은 호출을 처리할 수 없습니다.

  • SERVERCALL_RETRYLATER 애플리케이션이 일시적으로 호출을 처리할 수 없는 상태입니다.

설명

BeginBusyStateEndBusyState 함수는 애플리케이션의 사용 중인 상태를 제어합니다.

애플리케이션이 호출 BeginBusyState로 사용 중이면 마지막 설정에 의해 결정된 값으로 OLE 시스템 DLL의 SetBusyReply호출에 응답합니다. 호출 애플리케이션은 이 사용 중인 회신을 사용하여 수행할 작업을 결정합니다.

기본적으로 사용 중인 회신은 SERVERCALL_RETRYLATER. 이 회신으로 인해 호출 애플리케이션은 가능한 한 빨리 통화를 다시 시도합니다.

COleMessageFilter::SetMessagePendingDelay

호출하는 애플리케이션이 추가 작업을 수행하기 전에 호출된 애플리케이션의 응답을 기다리는 시간을 결정합니다.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

매개 변수

nTimeout
메시지 보류 지연 시간(밀리초)입니다.

설명

이 함수는 SetRetryReply와 함께 작동합니다.

COleMessageFilter::SetRetryReply

호출된 애플리케이션에서 사용 중인 응답을 수신할 때 호출하는 애플리케이션의 동작을 결정합니다.

void SetRetryReply(DWORD nRetryReply = 0);

매개 변수

nRetryReply
재시도 사이의 시간(밀리초)입니다.

설명

호출된 애플리케이션이 사용 중임을 나타내는 경우 호출 애플리케이션은 서버가 더 이상 사용 중이 아닐 때까지 기다리거나, 즉시 다시 시도하거나, 지정된 간격 후에 다시 시도하도록 결정할 수 있습니다. 호출을 완전히 취소할 수도 있습니다.

호출자의 응답은 함수 SetRetryReplySetMessagePendingDelay에 의해 제어됩니다. SetRetryReply 는 호출 애플리케이션이 지정된 호출에 대한 재시도 사이에 대기해야 하는 시간을 결정합니다. SetMessagePendingDelay 는 추가 작업을 수행하기 전에 호출 애플리케이션이 서버의 응답을 기다리는 시간을 결정합니다.

일반적으로 기본값은 허용되며 변경할 필요가 없습니다. 프레임워크는 호출이 진행되거나 메시지 보류 중인 지연이 만료될 때까지 nRetryReply 밀리초마다 호출을 다시 시도합니다. nRetryReply의 값이 0이면 즉시 재시도를 지정하고 - 1은 호출 취소를 지정합니다.

메시지 보류 지연이 만료되면 사용자가 통화를 취소하거나 다시 시도할 수 있도록 OLE "사용 중인 대화 상자"(COleBusyDialog 참조)가 표시됩니다. EnableBusyDialog를 호출하여 이 대화 상자를 사용하거나 사용하지 않도록 설정합니다.

통화 중에 키보드 또는 마우스 메시지가 보류 중이고 통화 시간이 초과된 경우(메시지 보류 중인 지연 시간 초과) "응답하지 않음" 대화 상자가 표시됩니다. EnableNotRespondingDialog를 호출하여 이 대화 상자를 사용하거나 사용하지 않도록 설정합니다. 일반적으로 이 상황은 문제가 발생하여 사용자가 조급해지고 있음을 나타냅니다.

대화 상자를 사용하지 않도록 설정하면 현재 "재시도 회신"이 항상 사용 중인 애플리케이션에 대한 호출에 사용됩니다.

참고 항목

CCmdTarget 클래스
계층 구조 차트
CCmdTarget 클래스