Düzeltme: ATL EXE sunucusu üzerinde CComAutoThreadModule tabanlı kayıt üzerinde askıda kalabilir

Makale çevirileri Makale çevirileri
Makale numarası: 202128 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

CComAutoThreadModule <>alarak bir ATL EXE sunucusu kayıtlı veya kaydı sırasında askıda kalma.

Neden

CComAutoThreadModule<>::Init() WinMain() adlandırılan bir iş parçacığı havuzu (iş <a1>Varsayılan</a1> 4 parçacıkları tarafından) oluşturur. Yıkıcı olan genel CComAutoThreadModule işlemi sonlandırır önce bu iş parçacığı sona erdirmek belirli yapar. Bu, WM_QUIT iletiye iş parçacıkları için iş parçacığı havuzu deftere nakil ve iş parçacığı tutamacı WaitForSingleObject() arama gerçekleşir. Iş parçacıklarının iş parçacıkları havuzdaki GetMessage() adlı değil, ve ileti sırası oluşturulmaz; böylece zamanlanır. Bu, PostThreadMessage(), başarısız olmasına neden olur. Bu yüzden, havuzdaki iş parçacıklarının sona erdirmek ve WaitForSingleObject() sona erdirmek iş parçacıkları için sonsuz olarak bekler.

Çözüm

Altcom.h dosyasında aşağıdaki kod yıkıcı CComAutoThreadModule fonksiyonunda vc98\atl\include dizininin içinde Değiştir:
   ::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT, 0, 0);
				

Bu kodla:
   while (::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT,
      0, 0) == 0) ::Sleep(100);
				

Durum

Microsoft bu hatanın bu makalenin başında listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Bu sorun, Microsoft Visual C++ .NET ile giderilmiştir.

Daha fazla bilgi

  1. Appwizard bir ATL EXE oluşturmak için kullanın.
  2. ATL nesnesinin her türlü projeye ekleyin.
  3. Stdafx.h içinde CComModuleCComAutoThreadModule<ccomsimplethreadallocator>ile değiştirin..
  4. Projeyi derleyin.

    Not: bu yana, sunucuyu özel bir derleme adımı kaydeder, sunucu bu noktada askıda kalabilir şansınız yoktur.
  5. Hata ayıklama Sekme türü altında Ayarlar'ı Project menüsündeki "/ RegServer" Program bağımsız değişkenleri</a0> iletişim kutusunda.
  6. Sunucu hata ayıklayıcıda çalıştırın.

    Not: ilk kez kapatmak, bu adımı yineleyin. Bu zamanlamayı ilişkili olduğundan, sorunu bazı makinelerde yeniden değil.

Özellikler

Makale numarası: 202128 - Last Review: 11 Aralık 2003 Perşembe - Gözden geçirme: 2.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ActiveX Template Library 3.0, 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 kbbug kbfix kblocalsvr kbthread KB202128 KbMttr
Machine-translated Article
Ö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:202128

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com