FIX: قد يتوقف خادم EXE ATL تعتمد CComAutoThreadModule على التسجيل

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية202128
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
يمكن تعليق ملقم EXE ATL استناداً إلى <>CComAutoThreadModule عند تسجيل أو تسجيله.
السبب
ينشئ CComAutoThreadModule<>::Init() يسمى في WinMain() تجمع مؤشر ترابط (بواسطة مؤشرات الترابط الافتراضي 4). destructor CComAutoThreadModule العمومية يجعل معينة من إنهاء مؤشرات الترابط هذه قبل إنهاء العملية. يحدث هذا عن طريق نشر رسالة WM_QUIT لكل من مؤشرات الترابط في تجمع مؤشرات الترابط استدعاء WaitForSingleObject() على مؤشر الترابط. تتم جدولة مؤشرات الترابط بحيث مؤشرات الترابط في التجمع قد لا يكون لديك استدعاء GetMessage() و بحيث لا يتم إنشاء قائمة انتظار الرسائل. يؤدي هذا PostThreadMessage() فشل. ومن ثم لا إنهاء مؤشرات الترابط في التجمع وينتظر WaitForSingleObject() بشكل لا نهائي مؤشرات الترابط إنهاء.
الحل
في ملف Altcom.h داخل دليل vc98\atl\include destructor في دالة CComAutoThreadModule استبدال التعليمة البرمجية التالية:
   ::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT, 0, 0);				

مع هذه التعليمة البرمجية:
   while (::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT,      0, 0) == 0) ::Sleep(100);				
تصريح
أقرت Microsoft أن يكون خطأ في منتجات Microsoft المسردة في بداية هذه المقالة هذا.

تم تصحيح هذه المشكلة في Microsoft Visual C++ .NET.
معلومات أخرى
  1. استخدام Appwizard لإنشاء ATL EXE.
  2. إدراج أي نوع من كائن ATL في المشروع.
  3. في Stdafx.h ، استبدل CComModuleCComAutoThreadModule<ccomsimplethreadallocator>.
  4. إنشاء المشروع.

    ملاحظة: هناك فرصة قد تعليق الملقم في هذه المرحلة لأن الخطوة البنية المخصصة تسجيل الملقم.
  5. في القائمة إعدادات المشروع ضمن نوع علامة التبويب تصحيح "/ RegServer" في مربع الحوار وسيطات برنامج.
  6. تشغيل الملقم في المصحح.

    ملاحظة: إذا فإنه لا تعليق لأول مرة كرر هذه الخطوة. لأن توقيت المتعلقة قد لا إعادة إنتاج المشكلة على بعض الأجهزة.
kbDSupport

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 202128 - آخر مراجعة: 01/06/2015 04:07:09 - المراجعة: 2.0

Microsoft ActiveX Template Library 3.0

  • kbnosurvey kbarchive kbmt kbbug kbfix kblocalsvr kbthread KB202128 KbMtar
تعليقات