Справочник функций и процедур Delphi: BeginThread

  Навигация по первой букве:

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z

  Навигация по категории:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

BeginThread
Функция
Начинает отдельный поток выполнения кода System unit
  function BeginThread ( SecurityAttr : Pointer; StackSize : LongWord; ThreadFunc : TThreadFunc; Param : Pointer; CreateFlags : LongWord; var ThreadId : LongWord ) : Integer;

Delphi Sources

Описание
Функция BeginThread начинает отдельный независимый от основного кода 'поток' выполнения кода.

Вы можете иметь больше чем один поток - каждый поток является другой, независимой разновидностью основной линии выполнения программы.

При вызове функции BeginThread, вы создаете новый поток, который выполняет указанную функцию ThreadFunc.

Когда поток создан, он возвращает идентификатор потока в возвращаемом целом числе. Когда поток возвращается, вы должны вызвать функцию Windows CloseThread для освобождения ресурсов.

Каждый поток имеет такой же доступ к данным модуля как и основной поток программы. Большая осторожность должна быть уделена при доступе к данным, общедоступным между потоками.

Для обеспечения уникальных переменных для каждого потока, используйте определение модуля ThreadVar, как в примере.

Вы можете передать данные каждому потоку через указатель Param, как в примере.

Атрибуты SecurityAttr, StackSize и CreateFlags выходят за области этой статьи.
Примечания
Класс TThread обеспечивает дополнительный метод выполнения потока.

Пронизывание это сложная тема - этот раздел касается только поверхности. Такие вопросы как синхронизации потоков, и параллельного управления доступа к данным выходят за области Основ Delphi.
Похожие команды
EndThread  Заканчивает поток с кодом завершения

IsMultiThread  Возвращает True, если код выполняет множество потоков

ThreadVar  Определяет переменные, которые получает каждый поток как отдельный экземпляр

 
Пример кода : Простой пример, который показывает множество диалогов
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
  Forms, Dialogs, Windows, SysUtils;

type
  TMsgRecord = record
    thread : Integer;
    msg    : string[30];
  end;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

Implementation
{$R *.dfm}        // Включение определений формы

ThreadVar         // Мы должны позволить каждому потоку его собственные образцы
                  //
переданной переменной записи
  msgPtr : ^TMsgRecord;

// Частная процедура потока для показа строки
function ShowMsg(Parameter : Pointer) : Integer;
begin
  // Установка 0 возвращаемому значению
  Result := 0;

  // Указываем указатель на переданные данные
  // Обратите внимание, что каждый поток имеет отдельную копию msgPtr
  msgPtr := Parameter;

  // Показ этого сообщения
  ShowMessagePos('Thread '+IntToStr(msgPtr.thread)+' '+msgPtr.msg,
                 200*msgPtr.thread, 100);

  // Конец потока
  EndThread(0);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  id1, id2 : LongWord;
  thread1, thread2 : Integer;
  msg1, msg2 : TMsgRecord;

begin
  // установка наших отображаемых сообщений
  msg1.thread := 1;
  msg1.msg    := 'Hello World';
  msg2.thread := 2;
  msg2.msg    := 'Goodbye World';

  // Запуск первого выполнения потока, спрошивающего имя пользователя
  thread1 := BeginThread(nil,
                         0,
                         Addr(ShowMsg),
                         Addr(msg1),
                         0,
                         id1);

  // И также спрашиваем фамилию
  thread2 := BeginThread(nil,
                         0,
                         Addr(ShowMsg),
                         Addr(msg2),
                         0,
                         id2);

  // Гарантируйте, что потоки будут закрыты только когда всё сделано
  ShowMessagePos('Press this when other dialogs finished.', 200, 300);

  // Наконец, убераемся, закрывая потоки
  CloseHandle(thread1);
  CloseHandle(thread2);
end;

end.
Три диалога отобразят:

Thread 1 Hello World
Thread 2 Goodbye Word
Нажмите это, когда другие диалоги завершатся.
 


Последние добавленные на сайт исходники

TDictionary Custom Sort

Fast Watermark Sources

3D Designer

Sik Screen Capture

Patch Maker

Айболит (remote control)

 

ListBox Drag & Drop

Доска для игры Реверси

Графические эффекты

Рисование по маске

Перетаскивание изображений

Canvas Drawing

 

Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software (источник – "DelphiBasics")

Группа ВКонтакте