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