Delphi-Help

TThreadFunc

Печать
Рейтинг пользователей: / 2
ХудшийЛучший 

TThreadFunc

Описание

type TThreadFunc : Function(Parameter : Pointer) : Integer;

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

Код возврата для функции это код завершения для потока.

Пример кода

// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем 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
Нажмите это, когда другие диалоги закончились.

Примечание

 

 

Авторизация



Счетчики