Вычислить максимальное число байт, необходимых
}
// Теперь, когда указатель проверен, получить длину
// входной строки (в символах).
iInputLen = IstrlenW ( bstrText ) ;
// Вычислить максимальное число байт, необходимых для
// входной строки.
UINT uiSize = ( ilnputLen * sizeof ( OLECHAR ) ) +
k_SIZE_FULLFORMATBYTES ;
// Захватить объект lock, чтобы защитить класс m_cOutput.
// Grab the lock to protect the m_cOutput class.
ObjectLock lock ( this ) ;
// Если это первое обращение к ProcessTrace (m_lBuffSize - 0),
//то этот if-блок служит исходной точкой распределения памяти,
if ( uiSize >= m_cOutput.BufferSize ( ) )
{
// Удалить существующий буфер и распределить больший.
m_cOutput.Free ( ) ;
// Распределить буфер, вдвое превышающий размер входной строки
. // Это делается для того, чтобы выполнять распределение памяти
//не так часто. Это компромисс между неиспользуемой
// дополнительной памятью и временем на непрерывные распределения.
// Умножение размера буфера на 2 гарантирует также, что
//сохраняется четный размер памяти. Программа работает
// с символами Unicode, поэтому следует избегать нечетных // распределений памяти.
UINT uiAllocSize = uiSize * 2 ;
// Убедитесь, что получен минимальный размер буфера.
// Минимальный размер буфера 2 Кбайт, так что в большинстве
// случаев код в этом if-блоке выполняется только однажды.
if ( k_MIN_TRACE_BUFF_SIZE > uiAllocSize )
{
uiAllocSize = k_MIN_TRACE_BUFF_SIZE ;
}
OLECHAR * pTemp = m_cOutput.Allocate ( uiAllocSize ) ;
ASSERT ( NULL != pTemp ) ;
if ( NULL == pTemp )
{
return ( Error ( IDSJXJTOFMEMORY ,
GUID_NULL , EJDUTOFMEMORY ) ) ;
}
}
// Все проверено, теперь можно начать реальную работу.
// Увеличить на 1 итоговый счетчик.
m_dwCurrCount++ ;
if ( 100000 == m_dwCurrCount )
{
m_dwCurrCount = 0 ;
}
// Установить указатель маркера в начало буфера вьвода
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий