Makale numarası: 193101 - Son Gözden Geçirme: 01 Haziran 2005 Çarşamba - Gözden geçirme: 4.0

Düzeltme: işlenmeyen bir özel durum, ikincil bir Visual C++ 6.0 MFC uygulaması iş parçacıkları, MFC yuva kullandığınızda oluşuyor

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Ikincil bir statik olarak bağlı Visual C++ 6.0 MFC uygulaması iş parçacıkları, MFC yuva kullanırken, işlenmeyen özel durum oluşur.

Neden

Işlenmeyen özel durum nedeni, CMapPtrToPtr işaretçi türünde bir nesne, m_pmapSocketHandle tarafından işaret, hiçbir zaman oluşturulur.

Çözüm

Yuvaları tarafından kullanılan işleyici eşlemeleri için her iş parçacığı oluşturulmuş olması gerekir. Aşağıdaki kod, bunu yapmak için bir işlevi gösterir:
   void SocketThreadInit()
   {
   #ifndef _AFXDLL
   #define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
   #define _afxSockThreadState AfxGetModuleThreadState()

      _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
      if (pState->m_pmapSocketHandle == NULL)
         pState->m_pmapSocketHandle = new CMapPtrToPtr;
      if (pState->m_pmapDeadSockets == NULL)
         pState->m_pmapDeadSockets = new CMapPtrToPtr;
      if (pState->m_plistSocketNotifications == NULL)
         pState->m_plistSocketNotifications = new CPtrList;

   #endif
   }
				
ilk yuva yeni iş parçacığı oluşturulmadan önce bu işlev bir kez her ikincil iş parçacığında çağrılmalıdır.

Durum

Microsoft bu durumun, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bir hata olduğunu onaylamıştır.

Bu hata, Visual Studio 6.0 Service Pack 3'te giderilmiştir. AfxSocketInit() Yuvalar kullanan her iş parçacığında gerekir.

Visual Studio hizmet paketleri hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki articlew görüntülemek üzere aşağıdaki makale numberw tıklatın:
194022  (http://support.microsoft.com/kb/194022/ ) Visual Studio 6.0 hizmet paketleri, ne, nerede, neden (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)
194295  (http://support.microsoft.com/kb/194295/ ) Visual Studio hizmet paketinin yüklü olmadığını belirleme

Daha fazla bilgi

MFC yuva uygulamalarında varsayılan olarak, birincil iş parçacığının bir kez AfxSocketInit denir. Bu işlev, birincil iş parçacığının MFC için statik olarak bağlı olduğunda işleyici eşlemeleri oluşturur. Ancak, ikincil bir iş parçacığı oluşturulurken, bu başına iş parçacığı tanıtıcısı eşlemeler oluşturulmaz. AfxSocketInit Yuva kitaplığı başlatılamadı her iş parçacığında çağrılmalıdır.

Davranışı Yeniden Oluşturma Adımları

  1. Ikincil bir iş parçacığı bir yuva oluşturur ve bir statik bir bağlantı kitaplığında MFC kullanan bir uygulama oluşturun. Proje ayarlarını değiştirerek, aşağıdaki Bilgi Bankası makalesinde açıklanan MultiSoc örnek, statik bir kitaplıkta MFC kullanmak için kullanabilirsiniz:
    175668  (http://support.microsoft.com/kb/175668/ ) MultiSoc: Yuva içindeki birden çok iş parçacığı kullanarak gösterir.
  2. Uygulamayı çalıştırın ve ikincil bir iş parçacığı bir yuva oluşturur.

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
175668  (http://support.microsoft.com/kb/175668/ ) MultiSoc: Yuva içindeki birden çok iş parçacığı kullanarak gösterir.


Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Anahtar Kelimeler: 
kbmt kbtshoot kbbug kbfix kbnoupdate kbvs600sp3fix kbwinsock KB193101 KbMttr
Otomatik TercümeOtomatik 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:193101  (http://support.microsoft.com/kb/193101/en-us/ )