Udostępnij za pośrednictwem


Klasa COleMessageFilter

Zarządza współbieżnością wymaganą przez interakcję aplikacji OLE.

Składnia

class COleMessageFilter : public CCmdTarget

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
COleMessageFilter::COleMessageFilter COleMessageFilter Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
COleMessageFilter::BeginBusyState Umieszcza aplikację w stanie zajęty.
COleMessageFilter::EnableBusyDialog Włącza i wyłącza okno dialogowe, które jest wyświetlane, gdy wywoływana aplikacja jest zajęta.
COleMessageFilter::EnableNotRespondingDialog Włącza i wyłącza okno dialogowe, które jest wyświetlane, gdy wywoływana aplikacja nie odpowiada.
COleMessageFilter::EndBusyState Przerywa stan zajętości aplikacji.
COleMessageFilter::OnMessagePending Wywoływana przez strukturę do przetwarzania komunikatów, gdy trwa wywołanie OLE.
COleMessageFilter::Register Rejestruje filtr komunikatów przy użyciu bibliotek DLL systemu OLE.
COleMessageFilter::Revoke Odwołuje rejestrację filtru komunikatów przy użyciu bibliotek DLL systemu OLE.
COleMessageFilter::SetBusyReply Określa odpowiedź zajętej aplikacji na wywołanie OLE.
COleMessageFilter::SetMessagePendingDelay Określa, jak długo aplikacja czeka na odpowiedź na wywołanie OLE.
COleMessageFilter::SetRetryReply Określa odpowiedź aplikacji wywołującej na zajętą aplikację.

Uwagi

Klasa jest przydatna COleMessageFilter w przypadku wizualnego edytowania aplikacji serwera i kontenera, a także aplikacji automatyzacji OLE. W przypadku wywoływanych aplikacji serwerowych tej klasy można użyć do tworzenia aplikacji "zajętej", tak aby przychodzące wywołania z innych aplikacji kontenera zostały anulowane lub ponowione później. Tej klasy można również użyć do określenia akcji, która ma zostać podjęta przez aplikację wywołującą, gdy wywołana aplikacja jest zajęta.

Typowe użycie jest przeznaczone dla aplikacji serwera do wywoływania BeginBusyState i EndBusyState, gdy byłoby niebezpieczne dla dokumentu lub innego obiektu z ułatwieniami dostępu OLE do zniszczenia. Te wywołania są wykonywane w aplikacji CWinApp::OnIdle podczas aktualizacji interfejsu użytkownika.

Domyślnie COleMessageFilter obiekt jest przydzielany podczas inicjowania aplikacji. Można go pobrać za pomocą AfxOleGetMessageFilter.

Jest to klasa zaawansowana; rzadko trzeba z nim pracować bezpośrednio.

Aby uzyskać więcej informacji, zobacz artykuł Serwery: implementowanie serwera.

Hierarchia dziedziczenia

Obiekt CObject

CCmdTarget

COleMessageFilter

Wymagania

Nagłówek: afxole.h

COleMessageFilter::BeginBusyState

Wywołaj tę funkcję, aby rozpocząć stan zajętości.

virtual void BeginBusyState();

Uwagi

Działa w połączeniu z EndBusyState w celu kontrolowania stanu zajętości aplikacji. Funkcja SetBusyReply określa odpowiedź aplikacji na wywoływanie aplikacji, gdy jest zajęta.

Metody BeginBusyState i EndBusyState wywołuje odpowiednio przyrost i dekrementację licznika, który określa, czy aplikacja jest zajęta. Na przykład dwa wywołania i BeginBusyState jedno wywołanie , aby EndBusyState nadal powodować stan zajętości. Aby anulować stan zajętości, należy wywołać EndBusyState tę samą liczbę wywołań BeginBusyState .

Domyślnie platforma wprowadza stan zajęty podczas bezczynności przetwarzania, który jest wykonywany przez CWinApp::OnIdle. Podczas gdy aplikacja obsługuje ON_COMMANDUPDATEUI powiadomień, połączenia przychodzące są obsługiwane później, po zakończeniu przetwarzania bezczynności.

COleMessageFilter::COleMessageFilter

Tworzy obiekt COleMessageFilter.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Włącza i wyłącza zajęte okno dialogowe, które jest wyświetlane po wygaśnięciu opóźnienia oczekiwania komunikatu (zobacz SetRetryReply) podczas wywołania OLE.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parametry

bEnableBusy
Określa, czy okno dialogowe "zajęty" jest włączone lub wyłączone.

COleMessageFilter::EnableNotRespondingDialog

Włącza i wyłącza okno dialogowe "nie odpowiada", które jest wyświetlane, jeśli podczas wywołania OLE oczekuje klawiatura lub mysz, a upłynął limit czasu wywołania.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parametry

bEnableNotResponding
Określa, czy okno dialogowe "nie odpowiada" jest włączone lub wyłączone.

COleMessageFilter::EndBusyState

Wywołaj tę funkcję, aby zakończyć stan zajętości.

virtual void EndBusyState();

Uwagi

Działa w połączeniu z BeginBusyState w celu kontrolowania stanu zajętości aplikacji. Funkcja SetBusyReply określa odpowiedź aplikacji na wywoływanie aplikacji, gdy jest zajęta.

Metody BeginBusyState i EndBusyState wywołuje odpowiednio przyrost i dekrementację licznika, który określa, czy aplikacja jest zajęta. Na przykład dwa wywołania i BeginBusyState jedno wywołanie , aby EndBusyState nadal powodować stan zajętości. Aby anulować stan zajętości, należy wywołać EndBusyState tę samą liczbę wywołań BeginBusyState .

Domyślnie platforma wprowadza stan zajęty podczas bezczynności przetwarzania, który jest wykonywany przez CWinApp::OnIdle. Gdy aplikacja obsługuje ON_UPDATE_COMMAND_UI powiadomień, połączenia przychodzące są obsługiwane po zakończeniu przetwarzania bezczynności.

COleMessageFilter::OnMessagePending

Wywoływana przez strukturę do przetwarzania komunikatów, gdy trwa wywołanie OLE.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parametry

PMsg
Wskaźnik do oczekującego komunikatu.

Wartość zwracana

Nonzero na sukces; w przeciwnym razie 0.

Uwagi

Gdy aplikacja wywołująca oczekuje na zakończenie wywołania, wywołania OnMessagePending struktury ze wskaźnikiem do oczekującego komunikatu. Domyślnie platforma wysyła WM_PAINT komunikatów, dzięki czemu aktualizacje okien mogą wystąpić podczas wywołania, które trwa długo.

Aby można było uaktywnić, należy zarejestrować filtr wiadomości za pomocą wywołania rejestru .

COleMessageFilter::Register

Rejestruje filtr komunikatów przy użyciu bibliotek DLL systemu OLE.

BOOL Register();

Wartość zwracana

Nonzero na sukces; w przeciwnym razie 0.

Uwagi

Filtr komunikatów nie ma wpływu, chyba że jest zarejestrowany w systemowych bibliotekach DLL. Zazwyczaj kod inicjowania aplikacji rejestruje filtr komunikatu aplikacji. Wszelkie inne filtry komunikatów zarejestrowane przez aplikację powinny zostać odwołane przed zakończeniem programu przez wywołanie odwołania.

Domyślny filtr komunikatów platformy jest automatycznie rejestrowany podczas inicjowania i odwoływanie po zakończeniu.

COleMessageFilter::Revoke

Odwołuje poprzednią rejestrację wykonywaną przez wywołanie metody Register.

void Revoke();

Uwagi

Przed zakończeniem działania programu należy odwołać filtr komunikatów.

Domyślny filtr komunikatów, który jest tworzony i rejestrowany automatycznie przez platformę, jest również automatycznie odwoływał.

COleMessageFilter::SetBusyReply

Ta funkcja ustawia "zajętą odpowiedź" aplikacji.

void SetBusyReply(SERVERCALL nBusyReply);

Parametry

nBusyReply
Wartość z SERVERCALL wyliczenia, która jest zdefiniowana w pliku COMPOBJ.H. Może mieć dowolną z następujących wartości:

  • SERVERCALL_ISHANDLED Aplikacja może akceptować wywołania, ale przetwarzanie określonego wywołania może zakończyć się niepowodzeniem.

  • SERVERCALL_REJECTED Aplikacja prawdopodobnie nigdy nie będzie mogła przetworzyć wywołania.

  • SERVERCALL_RETRYLATER Aplikacja jest tymczasowo w stanie, w którym nie może przetworzyć wywołania.

Uwagi

Funkcje BeginBusyState i EndBusyState kontrolują stan zajętości aplikacji.

Gdy aplikacja została zajęta wywołaniem metody BeginBusyState, odpowiada na wywołania z bibliotek DLL systemu OLE z wartością określoną przez ostatnie ustawienie SetBusyReply. Aplikacja wywołująca używa tej zajętej odpowiedzi, aby określić, jaką akcję należy podjąć.

Domyślnie zajęta odpowiedź jest SERVERCALL_RETRYLATER. Ta odpowiedź powoduje, że aplikacja wywołująca ponawia próbę wywołania tak szybko, jak to możliwe.

COleMessageFilter::SetMessagePendingDelay

Określa, jak długo aplikacja wywołująca czeka na odpowiedź z wywołanej aplikacji przed podjęciem dalszych działań.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parametry

nTimeout
Liczba milisekund opóźnienia oczekującego na komunikat.

Uwagi

Ta funkcja działa zgodnie z funkcją SetRetryReply.

COleMessageFilter::SetRetryReply

Określa akcję wywołującej aplikacji, gdy odbiera ona zajętą odpowiedź z wywoływanej aplikacji.

void SetRetryReply(DWORD nRetryReply = 0);

Parametry

nRetryReply
Liczba milisekund między ponownymi próbami.

Uwagi

Gdy wywołana aplikacja wskazuje, że jest zajęta, aplikacja wywołująca może zdecydować się poczekać, aż serwer nie będzie już zajęty, ponowić próbę od razu lub ponowić próbę po upływie określonego interwału. Może również zdecydować się na całkowite anulowanie połączenia.

Odpowiedź wywołującego jest kontrolowana przez funkcje SetRetryReply i SetMessagePendingDelay. SetRetryReply określa, jak długo aplikacja wywołująca powinna czekać między ponownymi próbami dla danego wywołania. SetMessagePendingDelay określa, jak długo aplikacja wywołująca czeka na odpowiedź z serwera przed podjęciem dalszych działań.

Zazwyczaj wartości domyślne są akceptowalne i nie trzeba ich zmieniać. Struktura ponawia próbę wywołania co nRetryReply milisekund, dopóki wywołanie nie przejdzie lub opóźnienie oczekujące na komunikat wygasło. Wartość 0 dla nRetryReply określa natychmiastowe ponowienie próby, a - 1 określa anulowanie wywołania.

Gdy opóźnienie oczekiwania na komunikat wygasło, zostanie wyświetlone okno dialogowe OLE "zajęty" (zobacz COleBusyDialog), aby użytkownik mógł anulować lub ponowić próbę wywołania. Wywołaj polecenie EnableBusyDialog , aby włączyć lub wyłączyć to okno dialogowe.

Gdy podczas wywołania jest oczekująca klawiatura lub komunikat myszy i przekroczono limit czasu wywołania (przekroczono opóźnienie oczekiwania na komunikat), zostanie wyświetlone okno dialogowe "nie odpowiada". Wywołaj polecenie EnableNotRespondingDialog , aby włączyć lub wyłączyć to okno dialogowe. Zazwyczaj ten stan rzeczy wskazuje, że coś poszło nie tak, a użytkownik jest niecierpliwy.

Gdy okna dialogowe są wyłączone, bieżąca "odpowiedź ponawiania" jest zawsze używana dla wywołań do zajętych aplikacji.

Zobacz też

Klasa CCmdTarget
Wykres hierarchii
Klasa CCmdTarget