Теория многозадачности и многопоточности
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: маркетинг реферат, рецензия на дипломную работу образец
| Добавил(а) на сайт: Чичеринов.
Предыдущая страница реферата | 1 2 3 4 5 6 | Следующая страница реферата
Когда все потоки, использующие эти данные будут завершены, первичный
поток освобождает индекс:
TIsFree (dwTlsIndex) ;
Полезно посмотреть как организована локальная память потока. (Мне
неизвестно, как в действительности Windows 95 это делает, но описываемая
схема вполне правдоподобна.) Во-первых, функция TIsAlloc могла бы просто
выделить блок памяти (длиной 0 байт) и вернуть значение индекса, который
является указателем на этот блок. Каждый раз при вызове функции TIsSet
Value с этим индексом блок памяти увеличивается на 8 байт с помощью функции
GlobalReAlloc. В этих 8 байтах хранятся идентификатор потока, вызывающего
функцию, полученный с помощью функции GetCurrentThreadID, и указатель, переданный функции TIsSetValue. Функция TIsGetValue просто использует
идентификатор потока для поиска в таблице, а затем возвращает указатель.
Функция TZsFree освобождает блок памяти.
Реализация многопоточности в Delphi
Стандартный мастер модулей в Delphi автоматически создает модуль содержащий класс потока с указанным именем. Весь код который необходимо вынести в отдельный поток помещается в метод класса Execute.
Базовый класс для создания потока пользователя – TThread
TThread = class
protected procedure DoTerminate; virtual; procedure Execute; virtual; procedure Synchronize(Method: TThreadMethod); property ReturnValue: Integer; property Terminated: Boolean; public constructor Create(CreateSuspended: Boolean); procedure Resume; procedure Suspend; procedure Terminate; function WaitFor: LongWord; property FreeOnTerminate: Boolean; property Handle: Thandle; property Priority: TthreadPriority; property Suspended: Boolean; property ThreadID: Thandle; property OnTerminate: TnotifyEvent;
end;
Процесс, породивший поток может гибко управлять его состоянием: приоритетом Priority; приостановить и продолжить его исполнения, а так же досрочно завершить выполнение потока.
Для вызова методов VCL необходимо синхронизировать дочерний поток с главным. Для этого служит процедура Synchronize(Method:TThreadMethod);
unit Unit1;
interface
uses
Classes;
type
TSamples = class(TThread) private
{ Private declarations } protected procedure Execute; override; end;
implementation
{ Подсказка Delphi по поводу Synchronize.
Important: Methods and properties of objects in VCL can only be used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure Samples.UpdateCaption; begin
Form1.Caption := 'Updated in a thread'; end; }
{ Samples }
procedure TSamples.Execute;
begin
{ Здесь должен быть размещен код потока }
end;
end.
Список используемой литературы
1. Turbo Pascal for Windows в 2-х томах. Нейл Рубенкинг Пер. с англ. –
М.:Мир, 1993, 536 с., ил.
2. Теория и практика C++. Герберт Шилдт. пер. с англ. – СПб.: BHV – Санкт-
Петербург, 1996. 416 с., ил.
3. Программирование для Windows 95; в 2-х томах. Чарльз Петзолд. пер. с англ. – СПб.: BHV – Санкт-Петербург, 1997.– 752 с., ил.
Рекомендуем скачать другие рефераты по теме: шпоры по управлению, доклад по биологии.
Категории:
Предыдущая страница реферата | 1 2 3 4 5 6 | Следующая страница реферата