В данном случае явный вызов стирания окна осуществлялся следующим фрагментом кода:

Invali dateRect(hWnd.NULL.FALSE); BeginPaint(hWnd.&ps);
SendMess age ( hWnd. WMJRASEBKGND. ( uns i gned ) ps. hdc. 0 ) ;

Но можно было обойтись двумя операторами, как показано ниже:

InvalidateRect(hWnd.NULL.TRUE); //Обратите внимание - здесь TRUE BeginPaint(hWnd.&ps); Здесь сообщение WM_ERASEBKGND пошлет функция Begi nPai nt ( ).

Более подробно эти вопросы будут рассмотрены при изучении регионов.

Измерение временных интервалов Принятие технических решений при разработке графических систем во многом определяется оценками затрат времени на вывод графических примитивов, работу системы моделирования и других частей приложения. Средства измерения времени позволяют выбрать вариант реализации, обеспечивающий максимальную скорость работы программы.

В простейшем случае можно в начале и конце контролируемого участка программы при помощи функции DWORD ti meGetTi me (VOID) узнать время в миллисекундах, прошедшее с момента начала работы операционной системы. Если дискретность отсчета времени оказывается слишком грубой, то контролируемый участок программы придется повторить несколько раз или подсчитать количество повторов за секунду.

В большой программе обычно нельзя циклически повторять измеряемый участок, так как это может полностью нарушить работу программы в целом. Кроме того, из-за использования кэш-памяти процессора фрагмент программы при повторном запуске может выполняться заметно быстрее, чем при однократном. В этом случае лучше использовать встроенный в процессор Pentium аппаратный счетчик TSC (Time Stamp Counter). Счетчик обнуляется при включении питания, после этого его содержимое увеличивается на единицу с каждым импульсом тактовой частоты процессора. Чтение этого счетчика наиболее точно фиксирует время работы коротких участков программы.

Рассмотрим пример использования счетчика TSC для измерения тактовой частоты процессора и времени выполнения фрагментов программ. Рабочий код программы можно найти в проекте RdTSC. Функция Ini tApp() совпадает с проектом Minim, поэтому для экономии места она не приводится. Начальный фрагмент приложения приведен в листинге 4.1.


⇐ Предыдущая| |Следующая ⇒