Программирование на Delphi

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

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

Процесс. Порождение дочернего процесса

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

Вместо устаревшей и поддерживаемой только для совместимости функции WinExec, гораздо правильнее пользоваться более мощной функцией:

function CreateProcess(lpApplicationName: pChar; lpCommandLine: pChar; lpProcessAttributes, lpThreadAttributes: pSecurityAttribytes;
bInheritHandles:BOOL;
dwCreationFlags: DWORD;
lpEnviroment: Pointer;
lpCurrentDirectory:pChar;
const lpStartupInfo: tStartupInfo;
var lpProcessInformation: tProcessInformation):BOOL;

Первые два параметра - это имя запускаемого приложения и передаваемые ему в командной строке параметры. Параметры dwCreationFlags содержит флаги, определяющие способ создания нового процесса и его приоритет. Структура lpStartupInfo содержит сведения о размере, цвете, положении окна создаваемого приложения. На выходе функции заполняется структура lpProcessInformation. В ней программисту возвращаются дескрипторы и идентификаторы созданного процесса и его первичного потока.

Локальные данные потока

Интересная проблема возникает, если в приложении будет несколько одинаковых потоков. Как избежать совместного использования одних и тех же переменных различными потоками? В первую очередь следует использовать поля объекта потомка tThread. Каждый поток соответствует отдельному экземпляру объекта, и их данные пересекаться не будут. Однако, может возникнуть необходимость в использовании функций API, которые знать не знают об объектах Delphi и их полях и свойствах. Для поддержки разделения данных на нижнем уровне в Object Pascal введена специальная директива - threadvar, которая отличается от обычной var тем, что применяется только к локальным данным потока. Следующее описание:

var data1:integer;
threadvar data2:integer;

Означает, что переменная data1 будет использоваться всеми потоками данного приложения, а переменная data2 будет у каждого потока своя.

Ермаков P.В. Основные разделы

 

 

Железо:
> раздел hardware

 

 

 

Обзоры программ:
> раздел software

 

 

 

Программирование:
> раздел programming

 

 

 

Операционные системы:
> раздел ОС

 

 

 

Графика и дизайн:
> раздел graphics

 

 

 

Сетевые технологии:
> раздел network