ВУЗ:
Составители:
Рубрика:
4
2. Создание потоков средствами API
Использование библиотеки API Win32 – наиболее мощный и универсаль-
ный способ работы с потоками на большинстве языков программирования [6].
Имеющиеся в Delphi специализированные классы являются надстройкой над со -
ответствующими функциями API.
Поток создается с помощью функции API, возвращающей дескриптор по-
тока
function CreateThread (
Attr: Pointer; // Адрес атрибутов безопасности
Stack: Dword; // Размер стека для потока
Start: Pointer; // Начальный адрес потока
par: pointer; // Аргументы потока
flag: Dword; // флаг создания
var ID: Dword // Возвращаемый идентификатор потока
): THandle; // Результат функции – дескриптор потока
Параметр Attr обычно задается равным Nil, что соответствует атрибутам
безопасности по умолчанию (более подробно см . раздел Win32 Programmer’s Ref-
erence в справочной системе Delphi).
Параметр Stack задает размер стека для потока. Если он равен нулю , то
размер стека совпадает с размером стека основного потока приложения .
Параметр Start – основной. Через него передается адрес функции, вызы -
ваемой при запуске потока. Эта функция обязана возвращать результат типа
longint, иметь один параметр типа Pointer. При описании функции необходимо
указывать атрибут stdcall (см . листинг ), определяющий стандартный для API спо-
соб вызова функции (запись аргументов в стек в порядке справа-налево, очистка
стека при завершении работы самой подпрограммой).
Параметр Par – указатель на структуру (запись ), содержащую аргументы ,
передаваемые в процедуру потока. Если Par=Nil, то аргументы отсутствуют.
Если задать флаг создания flag, равный нулю , то поток сразу начнет рабо-
ту, а если указать константу CREATE_SUSPENSED, то поток начнет работу толь-
ко после вызова функции
function ResumeThread (hThread: THandle): Dword;
Здесь hThread – дескриптор созданного потока.
Приостановить поток можно с помощью функции
function SuspendThread (hThread: THandle): Dword;
Чтобы досрочно завершить поток, следует вызвать функцию Suspend-
Thread , а затем - функцию
function CloseHandle(hThread: THandle): Dword;
2. С о здан ие п о то ко в средствам и API И сп ользование б иб лиотекиAPI Win32 – наиб олее мощ ны й иуниверсаль- ны й сп особ раб оты сп отоками наб ольш инстве язы ков п рог раммирования [6]. И мею щ иеся в Delphi сп ециализированны е классы являю тся надстройкой над со- ответствую щ имиф ункциямиAPI. П оток создается сп омощ ью ф ункцииAPI, возвращ аю щ ей дескрип тор п о- тока function CreateThread ( Attr: Pointer; // Адрес атрибутов безопасности Stack: Dword; // Размер стека для потока Start: Pointer; // Начальный адрес потока par: pointer; // Аргументы потока flag: Dword; // флаг создания var ID: Dword // Возвращаемый идентификатор потока ): THandle; // Результат функции – дескриптор потока П араметр Attr об ы чно задается равны м Nil, что соответствуетатриб утам б езоп асностип о умолчанию (б олееп одроб но см. раздел Win32 Programmer’s Ref- erence в сп равочной системеDelphi). П араметр Stack задаетразмер стекадля п отока. Е слион равен нулю , то размер стекасовп адаетсразмером стекаос новног о п отокап рилож ения. П араметр Start – основной. Ч ерезнег о п ередается адресф ункции, вы зы - ваемой п ри зап уске п отока. Э та ф ункция об язана возвращ ать результат тип а longint, иметь один п араметр тип аPointer. П риоп исанииф ункциинеоб ходимо указы вать атриб утstdcall (см.листинг ), оп ределяю щ ий стандартны й для API сп о- соб вы зоваф ункции(зап ись арг ументов в с тек в п орядке сп рава-налево, очистка стекап ризаверш ениираб оты самой п одп рог раммой). П араметр Par – указатель наструктуру (зап ись), содерж ащ ую арг ументы , п ередаваемы ев п роцедуру п отока. Е слиPar=Nil, то арг ументы отсутствую т. Е сли задать ф лаг с оздания flag, равны й нулю , то п оток сразу начнетраб о- ту, аеслиуказать константу CREATE_SUSPENSED, то п оток начнетраб оту толь- ко п ослевы зоваф ункции function ResumeThread (hThread: THandle): Dword; Здесь hThread – дескрип тор созданног о п отока. П риостановить п оток мож но сп омощ ью ф ункции function SuspendThread (hThread: THandle): Dword; Ч тоб ы досрочно заверш ить п оток, следуетвы звать ф ункцию Suspend- Thread , азатем - ф ункцию function CloseHandle(hThread: THandle): Dword; 4
Страницы
- « первая
- ‹ предыдущая
- …
- 2
- 3
- 4
- 5
- 6
- …
- следующая ›
- последняя »