Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  


Основы Delphi
IsMultiThread
Функция
Возвращает True, если код выполняет множество потоков System unit
  function IsMultiThread : Boolean;
Описание
Функция IsMultiThread возвращает истину, когда есть не менее одного потока, выполняющегося в дополнение к основному потоку программы.

Потоки являются сложным вопросом (к примеру, наш пример является очень простым, но совсем не коротким), и не может быть детально рассмотрен здесь.

Потоки могут быть запущены, используя BeginThread, как в примере, или используя класс TThread.
Похожие команды
BeginThread  Начинает отдельный поток выполнения кода

EndThread  Заканчивает поток с кодом завершения

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}        // Вложение определений формы

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



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия