А. Григорьев - О чём не пишут в книгах по Delphi

Здесь есть возможность читать онлайн «А. Григорьев - О чём не пишут в книгах по Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб, Год выпуска: 2008, ISBN: 2008, Издательство: БХВ-Петербург, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

О чём не пишут в книгах по Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «О чём не пишут в книгах по Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Рассмотрены малоосвещённые вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные механизмы их работы, особенности для протоколов TCP и UDP и др. Большое внимание уделено разбору ситуаций возникновения ошибок и получения неверных результатов в "простом и правильном" коде. Отдельно рассмотрены особенности работы с целыми, вещественными и строковыми типами данных, а также приведены примеры неверных результатов, связанных с ошибками компилятора, VCL и др. Для каждой из таких ситуаций предложены методы решения проблемы. Подробно рассмотрен синтаксический анализ в Delphi на примере арифметических выражений. Многочисленные примеры составлены с учётом различных версий: от Delphi 3 до Delphi 2007. Прилагаемый компакт-диск содержит примеры из книги.
Для программистов

О чём не пишут в книгах по Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «О чём не пишут в книгах по Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Во втором тесте полученное изображение Cntраз выводится на экран. Если бы оно выводилось всегда в одном и том же месте, пользователь не видел бы процесс вывода на экран, т.к. каждый следующий раз картинка рисовалась бы точно в том же месте, что и в предыдущий, и общее изображение не менялось бы. Чтобы этого не происходило, изображение выводится со случайным смещением относительно базовых координат, и пользователь может наблюдать за процессом. Кроме того, координаты определяются также параметром XOfs — это сделано для того, чтобы при тестировании DDB- и DIB-изображений рисунки выводились в разных частях окна и не накладывались друг на друга.

На некоторых компьютерах в этом тесте с 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, то последовательность псевдослучайных чисел

// будет строго детерминирована. Это свойство генератора

// случайных чисел используется, чтобы в обоих

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

RandSeed := RandomStart;

DoTest(IterCnt, 200, 1, pfDevice);

RandSeed := RandomStart;

DoTest(IterCnt, 450, 2, pf24bit);

finally

Screen.Cursor := crDefault;

SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);

SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «О чём не пишут в книгах по Delphi»

Представляем Вашему вниманию похожие книги на «О чём не пишут в книгах по Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «О чём не пишут в книгах по Delphi»

Обсуждение, отзывы о книге «О чём не пишут в книгах по Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x