Delphi справочник - Форум программистов - Навигация  
 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      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

Основы Delphi
EndThread
Процедура
Заканчивает поток с кодом завершения System unit
  procedure EndThread ( ExitCode : Integer ) ;
Описание
Процедура EndThread заканчивает функцию потока, передавая ExitCode вызывающей программе.

Потоки - сложный вопрос (пример является очень простым примером, но всеже не настолько короток), и детально здесь не рассматривается.

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

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

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

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

unit Unit1;

interface

uses
  Forms, Dialogs, Windows, SysUtils;

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

var
  Form1: TForm1;

Implementation
{$R *.dfm}        // Include form definitions

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

  msgPtr : ^TMsgRecord;

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

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

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

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

procedure TForm1.FormCreate(Sender: TObject);
var
  id1         : LongWord;
  thread1     : Integer;
  msg1        : TMsgRecord;
  showMsgFunc : TThreadFunc;

begin
  // Установка функции потока
  showMsgFunc := Addr(ShowMsg);

  // Установка наших отображаемых сообщений
  msg1.msg    := 'Hello World';

  // Проверяем, что мы не выполняем поток
  if IsMultiThread
  then ShowMessage('Многопоточный')
  else ShowMessage('Простой поток');

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

  // Проверяем, что мы выполняем поток
  if IsMultiThread
  then ShowMessage('Многопоточный')
  else ShowMessage('Простой поток');

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

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

end.

Последовательность диалогов отобразит:

Простой поток
Многопоточный + Сообщение потока : Hello World
Нажмите это, когда диалог потока закончится.
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия