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