Справочник функций и процедур Delphi: ThreadVar

  Навигация по первой букве:

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

  Навигация по категории:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

ThreadVar
Ключевое слово
Определяет переменные, которые получает каждый поток как отдельный экземпляр unit
  ThreadVar
  Declarations;

Delphi Sources

Описание
Ключевое слово ThreadVar начинает определение набора переменных, которые используются потоками.

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

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

IsMultiThread  Возвращает True, если код выполняет множество потоков

 
Пример кода : Простой пример
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
  Forms, Dialogs, Windows, SysUtils;

type
  TMsgRecord = record
    thread : Integer;
    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('Thread '+IntToStr(msgPtr.thread)+' '+msgPtr.msg,
                 200*msgPtr.thread, 100);

  // Конец потока
  EndThread(0);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  id1, id2 : LongWord;
  thread1, thread2 : Integer;
  msg1, msg2 : TMsgRecord;

begin
  // Установка наших отображаемых сообщений
  msg1.thread := 1;
  msg1.msg    := 'Hello World';
  msg2.thread := 2;
  msg2.msg    := 'Goodbye World';

  // Начало выполнения первого потока, спрашивая имя пользователей
  thread1 := BeginThread(nil,
                         0,
                         Addr(ShowMsg),
                         Addr(msg1),
                         0,
                         id1);

  // А также спрашиваем о фамилии
  thread2 := BeginThread(nil,
                         0,
                         Addr(ShowMsg),
                         Addr(msg2),
                         0,
                         id2);

  // Гарантируйте, что потоки будут закрыты только когда всё сделано
  ShowMessagePos('Нажмите это, когда другие диалоги закончились.', 200, 300);

  // Наконец, убераемся, закрывая потоки
  CloseHandle(thread1);
  CloseHandle(thread2);
end;

end.
Три диалога отобразят:

Thread 1 Hello World
Thread 2 Goodbye World
Нажмите это, когда другие диалоги закончились.
 


Последние добавленные на сайт исходники

DeLiKaTeS Tetris (Тетрис)

TDictionary Custom Sort

Fast Watermark Sources

3D Designer

Sik Screen Capture

Patch Maker

 

Айболит (remote control)

ListBox Drag & Drop

Доска для игры Реверси

Графические эффекты

Рисование по маске

Перетаскивание изображений

 

Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software (источник – "DelphiBasics")

Группа ВКонтакте