Поделиться через


Метод IHttpCacheSpecificData::ReferenceCacheData

Увеличивает количество внутренних ссылок для кэшированных данных.

Синтаксис

virtual VOID ReferenceCacheData(  
   VOID  
) = 0;  

Параметры

Этот метод не принимает параметров.

Потокобезопасность

Классы, реализующие интерфейс IHttpCacheSpecificData , являются потокобезопасны для методов DereferenceCacheData и ReferenceCacheData .

Комментарии

Классы, реализующие IHttpCacheSpecificData интерфейс, используют подсчет ссылок, который является потокобезопасной для управления памятью. При построении IHttpCacheSpecificData указателя внутреннее число ссылок (переменная-член private ) устанавливается в значение 1. При вызове ReferenceCacheData метода это число ссылок увеличивается на 1. При вызове DereferenceCacheData метода это же число ссылок уменьшается на 1. Указатель удаляется из кучи только в том случае, если число ссылок равно 0 IHttpCacheSpecificData . Эта схема гарантирует, что IHttpCacheSpecificData указатель не будет удален до тех пор, пока последний клиент этого указателя не вызовет DereferenceCacheData.

Примечания для разработчиков

Реализации ReferenceCacheData методов и DereferenceCacheData должны быть потокобезопасны для IHttpCacheSpecificData интерфейса. Разработчики должны предоставлять protected деструкторы или private , которые вызываются внутренним образом, только если количество ссылок переходит к 0.

Примечания для абонентов

Клиенты никогда не должны пытаться привести IHttpCacheSpecificData указатель к более конкретному классу, а затем вызвать delete напрямую. Вместо этого клиенты должны вызывать ReferenceCacheData метод ровно один раз при извлечении указателя на IHttpCacheSpecificData интерфейс, а затем вызывать DereferenceCacheData метод, когда к указателю IHttpCacheSpecificData больше не будет доступа. Методы и DereferenceCacheData следует вызывать ReferenceCacheData как можно раньше и как можно позже, соответственно, чтобы гарантировать, что IHttpCacheSpecificData указатель будет действителен в куче при доступе к ней и удаляется, когда он больше не нужен.

Пример

В следующем примере кода демонстрируется класс с именем MySpecificData , который реализует методы IHttpCacheSpecificData .

// Create a class that implements the IHttpCacheSpecificData interface.  
class MySpecificData : public IHttpCacheSpecificData  
{  
public:  
    // Create a public constructor.  
    // Set the internal reference count to 1.  
    MySpecificData ()  
    {  
        m_cRefs = 1;  
    }  
  
    // Increment the internal reference count.  
    virtual VOID ReferenceCacheData(VOID)  
    {  
        InterlockedIncrement(&m_cRefs);  
    }  
  
    // Decrement the internal reference count.  
    virtual VOID DereferenceCacheData(VOID)  
    {  
        // Decrement the reference count and delete this  
        // if the count is 0.  
        if (0 == InterlockedDecrement(&m_cRefs))  
        {  
            delete this;  
        }  
    }  
  
    // To do: implement custom MySpecificData implementation.  
  
private:  
    // Create a private destructor called from DereferenceCacheData.  
    virtual ~MySpecificData ()  
    {  
  
    }  
  
    // Create a private reference count member.  
    LONG m_cRefs;  
}  

Требования

Тип Описание
клиент — IIS 7.0 в Windows Vista
— IIS 7.5 в Windows 7
— IIS 8.0 в Windows 8
— IIS 10.0 в Windows 10
Сервер — IIS 7.0 в Windows Server 2008
— IIS 7.5 в Windows Server 2008 R2
— IIS 8.0 в Windows Server 2012
— IIS 8.5 в Windows Server 2012 R2
— IIS 10.0 в Windows Server 2016
Продукт — IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0
- IIS Express 7.5, IIS Express 8.0, IIS Express 10.0
Заголовок Httpserv.h

См. также:

Интерфейс IHttpCacheSpecificData