Delphi тип TThreadFunc визначає функцію, яка буде викликана BeginThread.
System unit
type TThreadFunc : Function(Parameter : Pointer) : Integer;
Тип TThreadFunc визначає функцію, а не дані. Ця функція зазвичай використовується як параметр для запиту функції BeginThread під час запуску окремого потоку операції. Певна функція виконує дії потоку.
Код повернення для функції це код завершення потоку.
Тип TThreadFunc в Delphi: Приклад коду
// Повний код Модуля
// -----------------------------------------------------------
// Ви повинні помістити цей код у модуль з ім'ям 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
Натисніть на це, коли інші діалоги закінчилися.
Подібні функції, процедури та команди
BeginThread — починає окремий потік виконання коду.
EndThread — закінчує потік із кодом завершення.
ThreadVar — визначає змінні, які одержує кожен потік як окремий екземпляр.