COleMessageFilter Sınıfı
OLE uygulamalarının etkileşimi için gereken eşzamanlılığı yönetir.
Sözdizimi
class COleMessageFilter : public CCmdTarget
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
COleMessageFilter::COleMessageFilter | Bir COleMessageFilter nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
COleMessageFilter::BeginBusyState | Uygulamayı meşgul durumuna getirir. |
COleMessageFilter::EnableBusyDialog | Çağrılan bir uygulama meşgul olduğunda görüntülenen iletişim kutusunu etkinleştirir ve devre dışı bırakır. |
COleMessageFilter::EnableNotRespondingDialog | Çağrılan bir uygulama yanıt vermediğinde görüntülenen iletişim kutusunu etkinleştirir ve devre dışı bırakır. |
COleMessageFilter::EndBusyState | Uygulamanın meşgul durumunu sonlandırır. |
COleMessageFilter::OnMessagePending | Bir OLE çağrısı devam ederken iletileri işlemek için çerçeve tarafından çağrılır. |
COleMessageFilter::Register | İleti filtresini OLE sistem DLL'lerine kaydeder. |
COleMessageFilter::Revoke | İleti filtresinin OLE sistemi DLL'lerine kaydını iptal eder. |
COleMessageFilter::SetBusyReply | Meşgul uygulamanın ole çağrısına yanıtını belirler. |
COleMessageFilter::SetMessagePendingDelay | Uygulamanın OLE çağrısına yanıt bekleme süresi belirler. |
COleMessageFilter::SetRetryReply | Çağıran uygulamanın meşgul bir uygulamaya yanıtını belirler. |
Açıklamalar
COleMessageFilter
sınıfı, görsel düzenleme sunucusu ve kapsayıcı uygulamalarının yanı sıra OLE otomasyon uygulamalarında da kullanışlıdır. Çağrılan sunucu uygulamaları için bu sınıf, diğer kapsayıcı uygulamalarından gelen çağrıların iptal edilmesi veya daha sonra yeniden denenmesi için uygulamayı "meşgul" yapmak için kullanılabilir. Bu sınıf, çağrılan uygulama meşgul olduğunda çağıran bir uygulama tarafından gerçekleştirilecek eylemi belirlemek için de kullanılabilir.
Yaygın kullanım, bir belge veya ole tarafından erişilebilen başka bir nesnenin yok edilmesi tehlikeli olabileceği durumlarda sunucu uygulamasının BeginBusyState ve EndBusyState'i çağırması içindir. Bu çağrılar, kullanıcı arabirimi güncelleştirmeleri sırasında CWinApp::OnIdle içinde yapılır.
Varsayılan olarak, uygulama başlatıldığında bir COleMessageFilter
nesne ayrılır. AfxOleGetMessageFilter ile alınabilir.
Bu gelişmiş bir sınıftır; nadiren doğrudan onunla çalışmanız gerekir.
Daha fazla bilgi için Sunucular: Sunucu Uygulama makalesine bakın.
Devralma Hiyerarşisi
COleMessageFilter
Gereksinimler
Üst bilgi: afxole.h
COleMessageFilter::BeginBusyState
Meşgul bir duruma başlamak için bu işlevi çağır.
virtual void BeginBusyState();
Açıklamalar
Uygulamanın meşgul durumunu denetlemek için EndBusyState ile birlikte çalışır. SetBusyReply işlevi, uygulamanın meşgul olduğunda uygulamaları çağırmaya yanıtını belirler.
ve BeginBusyState
EndBusyState
sırasıyla uygulamanın meşgul olup olmadığını belirleyen bir sayaç olan artış ve azaltmayı çağırır. Örneğin, iki çağrısı BeginBusyState
ve bir çağrı EndBusyState
hala meşgul duruma neden olur. Meşgul bir durumu iptal etmek için, aynı sayıda BeginBusyState
çağrı EndBusyState
yapılması gerekir.
Varsayılan olarak, çerçeve boşta işleme sırasında meşgul durumuna girer ve bu durum CWinApp::OnIdle tarafından gerçekleştirilir. Uygulama ON_COMMANDUPDATEUI bildirimleri işlerken, boşta işlem tamamlandıktan sonra gelen çağrılar daha sonra işlenir.
COleMessageFilter::COleMessageFilter
Bir COleMessageFilter
nesnesi oluşturur.
COleMessageFilter();
COleMessageFilter::EnableBusyDialog
Ole çağrısı sırasında ileti bekleyen gecikme süresi dolduğunda görüntülenen meşgul iletişim kutusunu etkinleştirir ve devre dışı bırakır (bkz . SetRetryReply).
void EnableBusyDialog(BOOL bEnableBusy = TRUE);
Parametreler
bEnableBusy
"Meşgul" iletişim kutusunun etkin mi yoksa devre dışı mı olduğunu belirtir.
COleMessageFilter::EnableNotRespondingDialog
Ole çağrısı sırasında bir klavye veya fare iletisi bekliyorsa ve arama zaman aşımına uğradıysa görüntülenen "yanıt vermiyor" iletişim kutusunu etkinleştirir ve devre dışı bırakır.
void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);
Parametreler
bEnableNotResponding
"Yanıt vermiyor" iletişim kutusunun etkin mi yoksa devre dışı mı olduğunu belirtir.
COleMessageFilter::EndBusyState
Meşgul durumunu sonlandırmak için bu işlevi çağır.
virtual void EndBusyState();
Açıklamalar
Uygulamanın meşgul durumunu denetlemek için BeginBusyState ile birlikte çalışır. SetBusyReply işlevi, uygulamanın meşgul olduğunda uygulamaları çağırmaya yanıtını belirler.
ve BeginBusyState
EndBusyState
sırasıyla uygulamanın meşgul olup olmadığını belirleyen bir sayaç olan artış ve azaltmayı çağırır. Örneğin, iki çağrısı BeginBusyState
ve bir çağrı EndBusyState
hala meşgul duruma neden olur. Meşgul bir durumu iptal etmek için, aynı sayıda BeginBusyState
çağrı EndBusyState
yapılması gerekir.
Varsayılan olarak, çerçeve boşta işleme sırasında meşgul durumuna girer ve bu durum CWinApp::OnIdle tarafından gerçekleştirilir. Uygulama ON_UPDATE_COMMAND_UI bildirimleri işlerken, boşta işlem tamamlandıktan sonra gelen çağrılar işlenir.
COleMessageFilter::OnMessagePending
Bir OLE çağrısı devam ederken iletileri işlemek için çerçeve tarafından çağrılır.
virtual BOOL OnMessagePending(const MSG* pMsg);
Parametreler
pMsg
Bekleyen iletinin işaretçisi.
Dönüş Değeri
Başarıda sıfır olmayan; aksi takdirde 0.
Açıklamalar
Çağıran bir uygulama bir çağrının tamamlanacağını beklerken, çerçeve bekleyen iletiye yönelik bir işaretçiyle çağırır OnMessagePending
. Varsayılan olarak, çerçeve WM_PAINT iletileri göndererek uzun süren bir çağrı sırasında pencere güncelleştirmelerinin gerçekleşebilmesini sağlar.
Etkin hale gelebilmesi için önce bir Yazmaç çağrısı yoluyla ileti filtrenizi kaydetmeniz gerekir.
COleMessageFilter::Register
İleti filtresini OLE sistem DLL'lerine kaydeder.
BOOL Register();
Dönüş Değeri
Başarıda sıfır olmayan; aksi takdirde 0.
Açıklamalar
sistem DLL'lerine kaydedilmediği sürece ileti filtresinin hiçbir etkisi olmaz. Genellikle uygulamanızın başlatma kodu uygulamanın ileti filtresini kaydeder. Uygulamanız tarafından kaydedilen diğer tüm ileti filtresi, program İptal Et çağrısıyla sonlandırılmadan önce iptal edilmelidir.
Çerçevenin varsayılan ileti filtresi başlatma sırasında otomatik olarak kaydedilir ve sonlandırma sırasında iptal edilir.
COleMessageFilter::Revoke
Register çağrısı tarafından gerçekleştirilen önceki bir kaydı iptal eder.
void Revoke();
Açıklamalar
Program sonlandırılmadan önce bir ileti filtresi iptal edilmelidir.
Çerçeve tarafından otomatik olarak oluşturulan ve kaydedilen varsayılan ileti filtresi de otomatik olarak iptal edilir.
COleMessageFilter::SetBusyReply
Bu işlev, uygulamanın "meşgul yanıtı" ayarlar.
void SetBusyReply(SERVERCALL nBusyReply);
Parametreler
nBusyReply
SABIT listesinden SERVERCALL
, COMPOBJ.H içinde tanımlanan bir değer. Aşağıdaki değerlerden herhangi birine sahip olabilir:
SERVERCALL_ISHANDLED Uygulama çağrıları kabul edebilir ancak belirli bir çağrıyı işlemede başarısız olabilir.
SERVERCALL_REJECTED Uygulama büyük olasılıkla bir çağrıyı asla işleyemeyecektir.
SERVERCALL_RETRYLATER Uygulama, geçici olarak bir çağrıyı işleyemediği bir durumdadır.
Açıklamalar
BeginBusyState ve EndBusyState işlevleri uygulamanın meşgul durumunu denetler.
Bir uygulama çağrısıyla BeginBusyState
meşgul edildiğinde, OLE sistemi DLL'lerinden gelen çağrılara son ayarı SetBusyReply
tarafından belirlenen bir değerle yanıt verir. Çağıran uygulama, hangi eylemin gerçekleştirileceğini belirlemek için bu meşgul yanıtı kullanır.
Varsayılan olarak meşgul yanıtı SERVERCALL_RETRYLATER. Bu yanıt, çağıran uygulamanın çağrıyı en kısa sürede yeniden denemesine neden olur.
COleMessageFilter::SetMessagePendingDelay
Çağıran uygulamanın daha fazla işlem gerçekleştirmeden önce çağrılan uygulamadan yanıt beklemesinin ne kadar süreceğini belirler.
void SetMessagePendingDelay(DWORD nTimeout = 5000);
Parametreler
nTimeout
İleti bekleyen gecikme için milisaniye sayısı.
Açıklamalar
Bu işlev SetRetryReply ile birlikte çalışır.
COleMessageFilter::SetRetryReply
Çağrılan bir uygulamadan meşgul bir yanıt aldığında çağıran uygulamanın eylemini belirler.
void SetRetryReply(DWORD nRetryReply = 0);
Parametreler
nRetryReply
Yeniden denemeler arasındaki milisaniye sayısı.
Açıklamalar
Çağrılan bir uygulama meşgul olduğunu gösterdiğinde, çağıran uygulama sunucunun artık meşgul olmamasını, hemen yeniden denemeyi veya belirtilen bir aralık sonrasında yeniden denemeyi beklemeye karar verebilir. Ayrıca aramayı tamamen iptal etmeye karar verebilir.
Çağıranın yanıtı, işlevler SetRetryReply
ve SetMessagePendingDelay tarafından denetlenir. SetRetryReply
, çağrı yapan uygulamanın belirli bir çağrı için yeniden denemeler arasında ne kadar beklemesi gerektiğini belirler. SetMessagePendingDelay
, daha fazla işlem gerçekleştirmeden önce çağıran uygulamanın sunucudan yanıt beklemesinin ne kadar süreceğini belirler.
Varsayılanlar genellikle kabul edilebilirdir ve değiştirilmesi gerekmez. Çerçeve, çağrı devam edene veya ileti bekleyen gecikme süresi dolana kadar her nRetryReply milisaniyesinde çağrıyı yeniden dener. nRetryReply için 0 değeri hemen bir yeniden deneme belirtir ve - 1 çağrısının iptalini belirtir.
İleti bekleyen gecikme süresi dolduğunda, kullanıcının aramayı iptal etmeyi veya yeniden denemeyi seçebilmesi için OLE "meşgul iletişim kutusu" (bkz . COleBusyDialog) görüntülenir. Bu iletişim kutusunu etkinleştirmek veya devre dışı bırakmak için EnableBusyDialog'u çağır.
Arama sırasında bir klavye veya fare iletisi beklemede olduğunda ve arama zaman aşımına uğradıysa (ileti bekleme gecikmesi aşıldığında), "yanıt vermiyor" iletişim kutusu görüntülenir. Bu iletişim kutusunu etkinleştirmek veya devre dışı bırakmak için EnableNotRespondingDialog çağrısı yapın. Bu durum genellikle bir şeylerin ters gittiğini ve kullanıcının sabırsızlandığını gösterir.
İletişim kutuları devre dışı bırakıldığında, meşgul uygulamalara yapılan çağrılar için her zaman geçerli "yanıtı yeniden dene" kullanılır.