Сущность технологии СОМ. Библиотека программиста   ::   Бокс Дональд

Страница: 477 из 528



Имея приведенную выше реализацию, метод программиста StartHacking может теперь использовать потребителя для индикации готовности результата:

STDMETHODIMP Programmer::StartHacking (void)

{

assert(m_pConsumer);

// preemptively notify of lateness

// приоритетно сообщаем о задержке

HRESULT hr = m_Consumer->OnProductWillBeLate(3);

if (FAILED(hr))

return PROGRAMMER_E_UNREALISTICCONSUMER;

// generate some code

// генерируем некоторый код

extern char *g_rgpszTopFiftyStatements[];

for (int n = 0; n < 100000; n++)

printf(g_rgpszTopFiftyStatements[rand() % 50]);

// inform consumer of done-ness

// извещаем потребителя о выполнении

hr = m_pConsumer->OnProductIsDone();

return S_OK;

}

To обстоятельство, что реализация ISoftwareConsumer может принадлежать к другому апартаменту, чем объект-программист, не является существенным. На самом деле метод StartHacking может быть вызван из того апартамента, который содержит объект-потребитель, и в этом случае будет осуществлено повторное вхождение в апартамент вызывающей программы, что, в сущности, является синхронным обратным вызовом. В то время как эта реализация делает вложенные вызовы на объект-потребитель, объект-программист может также в будущем производить вызовы методов объекта-потребителя в любое время. Эта привилегия остается до тех пор, пока не последует вызов метода Unadvise, разрывающий соединение.

|< Пред. 475 476 477 478 479 След. >|

Java книги

Контакты: [email protected]