Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size

IsMultiThread

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

IsMultiThread

Описание

function IsMultiThread : Boolean;

Функция IsMultiThread возвращает истину, когда есть не менее одного потока, выполняющегося в дополнение к основному потоку программы.
Потоки являются сложным вопросом (к примеру, наш пример является очень простым, но совсем не коротким), и не может быть детально рассмотрен здесь.
Потоки могут быть запущены, используя 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}        // Вложение определений формы

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
Нажмите это, когда диалог потока закончится.

Примечание

Авторизация



Счетчики