Определяет функцию, которая будет вызвана BeginThread
System unit
type TThreadFunc : Function(Parameter : Pointer) : Integer;
Описание
Тип TThreadFunc определяет функцию, а не данные. Эта функция обычно используется как параметр для запроса функции BeginThread при запуске отдельного потока операции. Определенная функция исполняет действия потока.
Код возврата для функции это код завершения для потока.
Похожие команды
BeginThread Начинает отдельный поток выполнения кода
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
Нажмите это, когда другие диалоги закончились.