Windows для профессионалов


Определение периодов выполнения потока - часть 3


BOOL QueryPerformanceCounler(LARGE_INTEGER* pliCount);

Они построены на том допущении, что поток не вытесняется, поскольку высоко точные измерения проводятся, как правило, в очень быстро выполняемых блоках кода. Чтобы слегка упростить работу с этими функциями, я создал следующий С++ - класс:

class CStopwatch
{
public:

CStopwatch() { QueryPerformanceFrequency(&m_liPeifFreq), Start(); }
void Start() { QueryPerformanceCounter(&m_liPerfStart); }

_irt64 Now() const
{ // возвращает число миллисекунд после вызова Start

LARGE_INTEGER liPerfNow;
QueryPerformanceCounter(&liPerfNow);
return(((liPerfNow.QuadPart - m_liPerfStart.QuadPart) * 1000) / m_liPerfFreq.QuadPart);
}

private

LARGE_INTEGER m_liPerfFreq;
// количество отсчетов в секунду

LARGE_INTEGER m_liPerfStart;
// начальный отсчет

};

Я применяю этот класс так:

// создаю секундомер (начинающий отсчет с текущего момента времени)
CStopwatch stopwatch;

// здесь н помещаю код, время выполнения которого нужно измерить

// определяю, сколько времени прошло
__int64 qwElapsedTime = stopwatch Now();

// qwElapsedTime сообщает длительность выполнения в миллисекундах




Начало  Назад  Вперед