Организация подзадач в Win

Win 32: Create Thread

Delphi/C Builder function: Begin Thread

Deplhi/C Builder Class: Tthread

Организация подзадач в ОС Windows возможна на 3 уровнях:

1) Базовый — непосредственное использование средств ОС

2) Подразумевает использование низкоуровневых средств, встроенных в системы программирования

3) Использование специализированных классов

Рассмотрим организацию подзадач осуществляется вызовом функции Begin Thread.

Sa — указатель на запись, описывающий права доступа, имеет смысл знач. NiL

stacksize размер стека, выделяемой подзад. (0 по умолчанию)

Thread Function — указатель на функцию потока содерж. Ссылку на функцию, кот. Выполн-ся в рамках подзадачи

р — указатель на область памяти, содержащий параметры функции потока

creationFlag1 — режим созд. Подзадач.

1) Создание и запуск

2) Созд. Приост. Передач. Которое нужно старт.

Function Begin Thread(

sa: Pointer;

stacksize: Integer;

ThreadFunction: TthreadFunc;

p: pointer;

creationflag1: Integer;

var Threadld: Integer

): Thadle;

var Threadld: Integer — индикатор создания подзад.

): Функция возвращает дескриптор, созданный подзадачей т. е. Это указатель на ячейку кот. Содержит

Создание подзад. Доступна через дескриптор.

Функция подзадачи:

ThreadFunction: TthreadFunc;

type TthreadFunc = function(parameter: pointer):Integer; // возвращаем результат

Указатель на параметр(параметры)

p: pointer; p-> array(record)

Подзад. Работает до тех пор пока выполняется функция подзадачи

Операции для подзадачи:

function SuspendThread(threadHandle: TthreadID): Dword //приостанавливает

function ResumeThread(threadHandle: TthreadID): Dword //запустить

результат — код ошибки

Приоритеты подзадачей Чтобы получить значение текущего приоритета используют функцию get, а что бы установить приоритет — set.

Приоритеты для подзадач являются относительные (± относительно приоритета основной задачи)

Подзадачи завершаются, когда добавляется функция потока.

Стандартный способ завершения если заранее неизвестно кол-во итераций, используется специальный флаг.

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

Окончательное удаление подзадачи из системы осуществляется вызовом фкнции CloseHandle(Handle)

В ОС Windows большинство системных объектов сообщают о своем состоянии с помощью сигналов. Другими словами объект может находится в сигнализирующем или несигнализирующем состоянии.

Подзадача переходит в сигнализирующее состояние в момент завершения.

Function WaitForSingleObject(

1 параметр — дескриптор

2 параметр: timeout — время в течении которого ожидается сигнал

Handle:Thandle;

dw Milliseconds:LongInt): DWORD;

function WaitForMultipleObject(n

IpHandle: pWOHhandleArray;

dWaitAll: BOOL;

dwMilliseconds: LongInt): DWORD

параметр: 1) ссылка для дескриптора

2)

3) режим ожидания dWaitAll


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: