Читаем О чём не пишут в книгах по Delphi полностью

На некоторых компьютерах в этом тесте с DDB-изображением наблюдается интересный эффект: время, измеренное программой, заметно меньше, чем время, когда картинка меняется на экране (например, пользователь ясно видит, что тест выполняется в течение примерно трех секунд, в то время как программа дает значение около одной секунды). Это связано со способностью некоторых видеокарт буферизовать переданные им команды и выполнять их асинхронно, т. е. вызов функции завершается очень быстро, программа продолжает работать дальше, а видеокарта параллельно ей выполняет команду. Если вы столкнетесь с такой ситуацией, можете провести небольшой эксперимент: вставить вызов функции Beep сразу после окончания второго теста. Вы услышите звуковой сигнал раньше, чем изображение закончит меняться.

Третий тест самый простой: Cnt раз значение свойства ScanLine присваивается переменной P. Так как значение P потом нигде не используется, компилятор выдает соответствующую подсказку, но в данном случае ее можно игнорировать.

Таким образом, метод DoTest нужно вызвать два раза: для DDB-изображения и для DIB это делает обработчик нажатия кнопки BtnStart (листинг 1.41).

Листинг 1.41. Обработчик нажатия кнопки BtnStart

procedure TForm1.BtnStartClick(Sender: TObject);

var

 IterCnt, RandomStart: Integer;

begin

 IterCnt:= StrToInt(EditIter.Text);

 GridResults.Cells[1, 1]:= '';

 GridResults.Cells[1, 2]:= '';

 GridResults.Cells[1, 3]:= '';

 GridResults.Cells[2, 1]:= '';

 GridResults.Cells[2, 2]:= '';

 GridResults.Cells[2, 3]:= '';

 // Чтобы новый текст ячеек отобразился в GridResults,

 // нужно, чтобы было извлечено их очереди и обработано

 // сообщение WM_PAINT. Чтобы сделать это немедленно,

 // вызываем Application.ProcessMessages.

 Application.ProcessMessages;

 Random.Start:= Random(MaxInt);

 Screen.Cursor:= crHourGlass;

 // Точное измерение времени выполнения кода в Windows

 // невозможно, потому что это многозадачная система, и

 // часть измеренного времени может быть потрачена на

 // выполнение кода других процессов. Чтобы максимально

 // уменьшить погрешность измерения, нужно установить

 // наивысший приоритет процессу и его главной нити —

 // тогда вероятность переключения процессора на

 // выполнение другой задачи будет минимальным. Столь

 // высокий приоритет приводит к тому, что во время

 // выполнения теста система перестаёт реагировать на

 // перемещение мыши. Поэтому необходимо использовать блок

 // try/finally, чтобы даже при возникновении исключения

 // приоритет процесса и нити был снижен до нормального

 // уровня.

 SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

 SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

 try

// В тестах активно используются псевдослучайные числа.

 // Чтобы сравнение было корректно, нужно, чтобы

 // последовательности чисел в экспериментах с DIB и DDB

 // были одинаковыми. Каждое следующее псевдослучайное

 // число генерируется на основе значения глобальной

 // переменной модуля System RandSeed. Значение RandSeed

 // при этом обновляется по определенному закону. Таким

 // образом, если установить определенное значение

 // RandSeed, то последовательность псевдослучайных чисел

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных