Программирование на 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