procedure EndThread ( ExitCode : Integer ) ;
Процедура EndThread заканчивает функцию потока, передавая ExitCode вызывающей программе. Потоки - сложный вопрос (пример является очень простым примером, но всеже не настолько короток), и детально здесь не рассматривается. Потоки могут быть начаты, используя BeginThread как в примере, или используя класс TThread.
|
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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.
|