Makale numarası: 138692 - Son Gözden Geçirme: 18 Ağustos 2005 Perşembe - Gözden geçirme: 1.3 Nasıl bir zaman aşımı CSocket operasyonlar yapılandırılır.
Bu SayfadaÖzetBu işlevler bir ça?r? döndürmez, yuva üstündeki bir hata oluştu ya da başarıyla tamamlayana kadar algılama işlemleri engelleyen CSocket işlemlere, Bağlan, alma ve gönderme. Bazı koşullarda, operasyonun hiçbir zaman başarıyla tamamlanamadı ve programınız için bu tamamlanması beklenirken sonsuza kadar döngü. Program aracılığıyla işleminin tamamlanması için izin verilen süre miktarını sınırlamak için iyi bir fikir olabilir. Bu makalede, bunu bir yolu anlatılır. Daha fazla bilgiBir yaklaşım, işlem çok uzun sürdü, harekete bir süreölçer ayarlanmış olacaktır. Bu yaklaşımın süreölçeri nasıl işlendiğini anahtarıdır. "Işlem engelliyor, ancak" hala gelen iletileri işlemek için özelliği de vardır. SetTimer kullanarak bir süreölçer ayarlarsanız, daha sonra WM_TIMER ileti bakın ve geldiğinde, işlemi iptal etmek. Bu işlemde kullanılan birincil işlevler şunlardır: Windows API çağrısı: :: SetTimer MFC işlevleri: Kolaylık olması açısından, bu işlev, CSocket-türetilmiş sınıf kapsüllenmiş. CSocket::OnMessagePending CSocket::CancelBlockingCall UYARı: başka okuma önce bazı sorunlara yol açıp OnMessagePending geçersiz kılmak ve bir süreölçeri çalışırsanız, MFC sürümlerinde bir hata olduğunu unutmayın. Bu sorun, aşağıdaki Microsoft Bilgi Bankası makalesinde belgelenmiştir: 137632
(http://support.microsoft.com/kb/137632/EN-US/
)
Hata: bir süreölçer Active olduğunda Aranan OnMessagePending değil Bu makale, yalnızca sürümler için 1.52 1.52b, 2.1 ve Visual C++, 2.2 geçerlidir. Visual C++'ın bu sürümlerini kullanıyorsanız, daha sonra de sağlanan geçici çözümü gerekir. Bu zaman aşımı olanağı sağlayan bir sınıf için örnek kod, bu makalenin sonunda bulunmaktadır. Sınıfı tarafından uygulanan işlevleri, bu makalede aşağıdaki bölümlerde açıklanmıştır. BOOL SetTimeOut(UINT uTimeOut)Bu hemen CSocket işlevi (örnek, Receive, send ve kabul) çağırmadan önce çağrılması. Milisaniye cinsinden uTimeOut parametresi belirtildi. Aşağıdaki uygulama yalnızca süreölçer ayarlar. Süreölçer ayarlama denemesi başarısız oldu, bu işlev, YANLıŞ değerini verir. Daha fazla ayrıntı için SetTimer işlevi Windows API belgelerine bakın.BOOL KillTimeOut()Bu işlev engelleyen işlemi tamamlandıktan sonra çağrılması gerekir. Bunu SetTimeOut ile ayarlanan süreölçeri kaldırır. KillTimer çağrısı başarısız oldu, YANLıŞ değerini verir. Daha fazla ayrıntı için KillTimer işlevi Windows API belgelerine bakın.BOOL OnMessagePending()Bir işlemin tamamlanmasını bekliyor CSocket sınıf adlandırılır, sanal bir geri arama budur. Gelen iletiler bir şey yapın olanağı verir. Bu uygulama ile SetTimeOut görüşmesi süreölçer WM_TIMER ileti için denetler. Ve, sonra da geldiğinde, CancelBlockingCall işlevini çağırır. Ayrıntılar için OnMessagePending ve CancelBlockingCall işlevleri MFC belgelerine bakın. Arama CancelBlockingCall, işlemin başarısız olmasına neden olur ve GetLastError WSAEINTR (kesilen işlem gösteren) döndürecektir olduğunu unutmayın.Işte bu sınıfın bir örnek Kullanım: Örnek kodReferanslarSetTimer ve KillTimer işlevleri hakkında daha fazla bilgi için lütfen Windows API Yardım dosyasına bakın. CSocket sınıfı ve üye işlevleri hakkında daha fazla bilgi için lütfen bkz: Visual C++ 2.x da - MFC Yardım dosyası. Visual C++ 1.5 x - The Mfcext.hlp Yardım dosyası, \Msvc15\Help dizininde <a1>CD</a1> diskinde bulunur.
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:138692
(http://support.microsoft.com/kb/138692/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukMakale çevirileri |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Üste