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

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

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

  Реклама:

 

TThreadFunc
Тип
Определяет функцию, которая будет вызвана BeginThread System unit
  type TThreadFunc : Function(Parameter : Pointer) : Integer;

Google  
 
Описание
Тип TThreadFunc определяет функцию, а не данные. Эта функция обычно используется как параметр для запроса функции BeginThread при запуске отдельного потока операции. Определенная функция исполняет действия потока.

Код возврата для функции это код завершения для потока.
Похожие команды
BeginThread  Начинает отдельный поток выполнения кода

EndThread  Заканчивает поток с кодом завершения

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;
  showMsgFunc : TThreadFunc;

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

  // Устанавливаем наши отображаемые сообщения
  msg1.thread := 1;
  msg1.msg    := 'Hello World';
  msg2.thread := 2;
  msg2.msg    := 'Goodbye World';

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

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

  // Гарантируйте, что потоки будут закрыты только когда всё сделано
  ShowMessagePos('Нажмите это, когда другие диалоги закончились.', 200, 300);

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

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

Thread 1 Hello World
Thread 2 Goodbye World
Нажмите это, когда другие диалоги закончились.
 


Copyright © 2004-2016 Delphi Sources (источник – "DelphiBasics.ru")
 


Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook