Функція IsMultiThread в Delphi повертає True, якщо код виконує безліч потоків.
System unit
function IsMultiThread : Boolean;
Функція IsMultiThread повертає істину, коли є не менше одного потоку, що виконується на додаток до основного потоку програми.
Потоки є складним питанням (наприклад, наш приклад є дуже простим, але зовсім не коротким) і не може бути детально розглянутий тут.
Потоки можуть бути запущені, використовуючи BeginThread, як у прикладі, або використовуючи клас TThread.
Функція IsMultiThread:Приклад коду
// Повний код Модуля.
// -----------------------------------------------------------
// Ви повинні помістити цей код у модуль з ім'ям 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} // Вкладення визначень форми
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('Натисніть це, коли діалог потоку закінчиться.', 200, 300);
// Зрештою, закриваємо потоки
CloseHandle(thread1);
end;
end.
Результат
Послідовність діалогів відобразить:
Простий потік
Багатопотоковий + Повідомлення потоку : Hello World
Натисніть це, коли діалог потоку закінчиться.
Подібні функції, процедури та команди
BeginThread — починає окремий потік виконання коду.
EndThread — закінчує потік із кодом завершення.
ThreadVar — визначає змінні, які отримує кожен потік як окремий екземпляр.