Способы реализации модели апартамента пула потоков сервера COM ATL

Переводы статьи Переводы статьи
Код статьи: 244495 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

Microsoft Active Template Library (ATL) позволяет определить пул потоков STA в ATL, вне процесса сервер с каждого объекта, созданного на своем собственном потоке. Действия, описанные в разделе «Дополнительная информация» этой статьи показано, как это сделать.

Дополнительная информация

Для создания объектов из пула потоков требуются следующие действия:
  1. Является производным от класса CExeModule или CServiceModule:
    CComAutoThreadModule<>
    					
    CExeModule : public CComAutoThreadModule<>
    					
  2. ОбъявленияDECLARE_CLASSFACTORY_AUTO_THREAD()в каждом классе ATL, которые могут выполняться в потоке STA пула
  3. ОбъявленияDECLARE_NOT_AGGREGATABLE()в каждом классе ATL, которые могут выполняться в потоке STA пула
    DECLARE_NOT_AGGREGATABLE(CMyPooledObject)
    					
  4. Изменить модульCExeModule::Unlock()-или-CServiceModule::Unlock()метод для вызова:
    CComAutoThreadModule<>::Unlock()
    						
    LONG CExeModule::Unlock()
    {
       LONG l = CComAutoThreadModule<>::Unlock();
       if (l == 0)
       {
         bActivity = true;
         SetEvent(hEventShutdown); // tell monitor that we transitioned to zero
       }
       return l;
    }
    						
Это выполняется для службы, необходимо выполнить одно действие. Измените следующий код:
inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid)
{
   CComModule::Init(p, h, plibid);
				
Кому::
inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid)
{
   CComAutoThreadModule<>::Init(p, h, plibid);
				
По умолчанию библиотеки ATL создает пул потоков четыре процессора. Это можно изменить в вызове _Module.Init() вtWinMain()функция вызвать, указав число потоков в необязательный далее параметров. По умолчанию CComAutoThreadModule использует CComSimpleThreadAllocator как распределитель потока. CComSimpleThreadAllocator использует схему простой циклического обслуживания для создания объектов в пуле потоков.

Ссылки

Дополнительные сведения о поискеDECLARE_CLASS_FACTORY_AUTO_THREAD()иCComAutoThreadModuleи Microsoft Developer Network (MSDN).

Для получения дополнительных сведений обратитесь к следующей статье Базы Знаний Майкрософт::
202128Исправление: Exe ATL-сервер, в зависимости от CComAutoThreadModule может зависать при регистрации

Свойства

Код статьи: 244495 - Последний отзыв: 18 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft ActiveX Template Library 3.0
Ключевые слова: 
kbarchitecture kbhowto kblocalsvr kbservice kbthread kbmt KB244495 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:244495

Отправить отзыв

 

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