Создание потоков (нитей, threads) и управление потоками. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание потоков (нитей, threads) и управление потоками.

Поиск

 

Существует 2 основных способа работа с потоками: через функции API и с помощью специализированных классов. Использование библиотеки API Win32 - наиболее мощный и универсальный метод работы с потоками. Все специализированные классы являются надстройками над соответствующими функциями API.

Поток создаётся с помощью функции API, возвращающей дескриптор потока:

function CreateThread(

Attr: pointer; //адрес аттрибутов безопасности

Stack: Dword; //размер стека для потока

Start: pointer; //начальный адрес потока

Par: pointer; //аргументы потока

flag: Dword; //флаг создания

var ID: Dword; //возвращаемый идентификатор потока

):Thandle;   //дескриптор потока

 

Параметр Attr обычно задаётся равным Nil, что соответствует атрибутам безопасности по умолчанию.

Параметр Stack задаёт размер стека потока. Если он равен нулю, то размер стека совпадает с размером стека основного потока.

Параметр Start основной. Через него передаётся адрес функции, вызываемой при запуске потока. Эта функция обязана возвращать результат типа longint,иметь один параметр типа pointer. При описании функции необходимо атрибут stdcall, определяющий стандартный для API способ вызова функции(запись аргументов в стек в порядке справо-налево, очистка стека при завершении работы самой подпрограммой).

Параметр Par – указатель на структуру(запись), содержащую аргументы, передаваемые в процедуру потока. Если Par=Nil, то аргументы отсутствуют.

Если задать флаг создания равным нулю, то поток сразу начнёт работу, а если указать константу CREATE_SUSPENDED, то поток начнёт работу только после вызова функции

function ResumeThread(hThread: Thandle): Dword;

Здесь hThread — дескриптор созданного потока.

Приостановить поток можно с помощью функции

function SuspendThread(hThread: Thandle): Dword;

Чтобы досрочно завершить поток нужно сначала вызвать функцию SuspendThread, а затем функцию

function CloseHandle(hThread: THandle): Dword;  

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 48; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.008 с.)