| Описание |  
Функция 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 
Нажмите это, когда другие диалоги завершатся. 
 |  
  |