Главная » Delphi

Синхронизация потоков

Добавлено Дата: 8 March, 2012 категория: Delphi

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

Читать »

Хранение локальных данных потоков

Добавлено Дата: 8 March, 2012 категория: Delphi

Поскольку каждый  поток  представляет собой  отдельный и независимый путь вы полнения программного кода внутри  процесса, было  бы логично предположить, что на определенном этапе потребуется какое либо средство хранения данных, связанных с каждым потоком. Существует три метода хранения данных, уникальных для каждого потока. Первый, и самый  простой, состоит в использовании локальных переменных (в стеке). Поскольку каждый  поток  получает собственный стек,  при  выполнении  од ной  процедуры или  функции он  будет иметь  и собственную копию  локальных пере менных. Второй метод  заключается в сохранении локальной информации в объекте, производном от класса  TThread. И,  наконец, можно  применить зарезервированное слово Object Pascal threadvar, чтобы  воспользоваться преимуществами хранения локальной информации потока на уровне операционной системы.

Читать »

Приостановка и возобновление потока

Добавлено Дата: 7 March, 2012 категория: Delphi

Давайте вспомним, что  говорилось в этой  главе  ранее о конструкторе Create() класса TThread. Как уже было сказано, поток  может быть создан в приостановленном состоянии, и для того  чтобы  он начал  выполняться, необходимо вызвать метод  Re- sume(). Логично предположить, что  поток  может  быть  приостановлен и возобнов лен динамически. Эта задача решается с помощью  методов Suspend() и Resume().

Читать »

События и сообщения Delphi

Добавлено Дата: 7 March, 2012 категория: Delphi

Те, кому уже приходилось создавать приложения Windows традиционными методами, безусловно оценят простоту использования событий Delphi. Исключается всякая  необхо димость  организации перехвата сообщений Windows,  их обработки, анализа и т.д. Более подробная информация по этой теме приведена в главе 3, “Приключения сообщения”.

Читать »

Приоритеты и расписание

Добавлено Дата: 7 March, 2012 категория: Delphi

Как уже говорилось, операционная система  отвечает за выделение каждому потоку нескольких циклов  процессора, в течение которых они  могут работать. Количество времени, выделяемое отдельному потоку,  зависит от его приоритета. Приоритет от дельного потока определяет комбинация приоритета  процесса, создавшего поток (называемого приоритетом класса (priority class)),  и приоритета относительно самого потока (называемого относительным приоритетом (relative priority)).

Читать »

Демонстрационное приложение

Добавлено Дата: 7 March, 2012 категория: Delphi

Чтобы полностью проиллюстрировать работу  нескольких потоков в среде  Delphi, создадим  проект EZThrd. Поместим в его главную форму окно  примечания, как пока зано на рис. 5.3.

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

Читать »

Синхронизация с подпрограммами библиотеки  VCL

Добавлено Дата: 7 March, 2012 категория: Delphi

Как уже неоднократно упоминалось в настоящей главе,  прямой доступ к свойствам или методам  компонентов библиотеки VCL следует выполнять только  из основного по тока приложения. Это означает, что любой код, который получает доступ или обновля ет данные  пользовательского интерфейса в приложении, должен  выполняться только  в контексте основного потока. Недостатки такой архитектуры вполне очевидны, и может показаться, что  это  требование слишком  уж связывает руки разработчику, однако  уже одно то, что о данном ограничении известно, дает определенное преимущество.

Читать »

Объект TThread

Добавлено Дата: 6 March, 2012 категория: Delphi

Фактически Delphi  инкапсулирует в объекте Object  Pascal TThread объект потока API. Хотя класс TThread инкапсулирует практически все важнейшие функции объек та потока API в одном  едином  объекте, возможны ситуации, когда придется непо средственно обращаться к функциям API. Чаще всего это будет связано с необходимо стью синхронизации потоков. В настоящем разделе обсудим работу  объекта TThread и его применение в создаваемых приложениях.

Читать »

Создание многопоточных приложений

Добавлено Дата: 6 March, 2012 категория: Delphi

Концепция потоков

Поток (thread) — это объект операционной системы, который представляет собой отдельный путь выполнения программы внутри  определенного процесса. Каждое приложение Win32 имеет, по крайней мере,  один  поток, обычно называемый первич ным, или  главным, но  приложения имеют  право  создавать дополнительные потоки, предназначенные для выполнения других задач.

Читать »

Новые возможности  Delphi 6

Добавлено Дата: 6 March, 2012 категория: Delphi

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

Читать »

Совместимость Delphi и Kylix

Добавлено Дата: 5 March, 2012 категория: Delphi

Реализуя  приложение с высокой степенью совместимости между Delphi  и Kylix, не обходимо учитывать тот факт, что технология VCL применима только  для Windows. Ес ли необходимо создать  межплатформенное приложение или  компонент, то  придетсявоспользоваться библиотекой компонентов для X платформы (CLX — Component Library for X platform), которая в настоящий момент поддерживает и Delphi  6, и Kylix. Более  под робная информация о платформе CLX приведена в главах 10, “Архитектура компонен тов: VCL и CLX” , и 13, “Разработка компонентов CLX”. В библиотеку CLX входят четы ре основных компонента.

Читать »

Модули, компоненты и пакеты

Добавлено Дата: 5 March, 2012 категория: Delphi

Формат откомпилированных модулей  Delphi  (файлы .dcu) имеет  тенденцию из меняться от версии к версии компилятора. Это означает, что,  если  необходимо при менять один  и тот  же модуль в нескольких версиях Delphi, следует  иметь  исходный код каждого  модуля, используемого приложением. В этом случае невозможно вос пользоваться компонентами (неважно, кем они  изготовлены), если  не  будет в нали чии их исходного кода. При  отсутствии исходного кода какого либо компонента, раз работанного независимым производителем, обратитесь к распространителю за вер сией компонента, соответствующей вашей версии Delphi.НА ЗАМЕТКУ

Читать »

Общая совместимость Delphi

Добавлено Дата: 5 March, 2012 категория: Delphi

Общая  совместимость между различными версиями Delphi, C++Builder  и Kylix свя зана  с большим  количеством проблем и  обстоятельств. Изучив  эти  подробности и особенности компиляторов, можно  научиться создавать и поддерживать такой  код, который с небольшими доработками может  быть перенесен не только  с одной  версии компилятора на другую, но и на иную платформу.

Читать »

Взаимосвязь сообщений  и событий

Добавлено Дата: 5 March, 2012 категория: Delphi

Теперь уже сказано достаточно, чтобы  понять, что  система событий Delphi пред ставляет собой  интерфейс для взаимодействия с сообщениями Windows,  по крайней мере — с некоторой их частью.  Многие  события компонентов библиотеки VCL непо средственно связаны с сообщениями Windows типа WM_XXX. В табл. 3.3 приведены ос новные события компонентов библиотеки VCL и соответствующие им сообщения Windows.

Читать »

Обзор простейшего приложения Delphi

Добавлено Дата: 5 March, 2012 категория: Delphi

Простое действие, например перетаскивание компонента “Кнопка”  в форму,  при водит к автоматическому созданию кода данного элемента и добавлению его к объекту формы:

type

TForm1 = class(TForm)

Button1: TButton;

private

{ Закрытые объявления }

Читать »