Облака / Clouds
    Go to Copy.com
    Copy.com
    The bast cloud service
    Get 20 GB free!!!
    Support WebDav.
    Show more >>

    Go to Dropbox.com
    Dropbox.com
    time-tested cloud storage
    Support WebDav.
Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Сохранение странички в файл из TWebBrowser
   Категория: Интернет и Сети
  Компоненты Panel, GroupBox, Bevel, ScrollBox, Splitter
   Категория: Компоненты
  Поиск по EasyTable
   Категория: Базы данных
  Определить МАС-адрес карты
   Категория: Интернет и Сети
  Упаковать *.mdb-файл
   Категория: Базы данных
  Упаковать BD Accuracer
   Категория: Базы данных
  Получить имена всех папок и файлов в директории
   Категория: Файловая система
  К-во рабочих дней в месяце
   Категория: Математика
  Автоматическое определения кодировки текста
   Категория: Текст и строки

Delphi - Справочник: BeginThread

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 BeginThread
function BeginThread ( SecurityAttr : Pointer; StackSize : LongWord; ThreadFunc : TThreadFunc; Param : Pointer; CreateFlags : LongWord; var ThreadId :
LongWord ) : Integer;
Функция (Unit System)
Начинает отдельный поток выполнения кода
Описание:
Функция BeginThread начинает отдельный независимый от основного кода 'поток' выполнения кода.

Вы можете иметь больше чем один поток - каждый поток является другой, независимой разновидностью основной линии выполнения программы.

При вызове функции BeginThread, вы создаете новый поток, который выполняет указанную функцию ThreadFunc.

Когда поток создан, он возвращает идентификатор потока в возвращаемом целом числе. Когда поток возвращается, вы должны вызвать функцию Windows CloseThread для освобождения ресурсов.

Каждый поток имеет такой же доступ к данным модуля как и основной поток программы. Большая осторожность должна быть уделена при доступе к данным, общедоступным между потоками.

Для обеспечения уникальных переменных для каждого потока, используйте определение модуля ThreadVar, как в примере.

Вы можете передать данные каждому потоку через указатель Param, как в примере.

Атрибуты SecurityAttr, StackSize и CreateFlags выходят за области этой статьи.
Пример кода: Простой пример, который показывает множество диалогов

// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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('Press this when other dialogs finished.', 200, 300); // Наконец, убераемся, закрывая потоки CloseHandle(thread1); CloseHandle(thread2); end; end.

Результат:
Три диалога отобразят:

Thread 1 Hello World
Thread 2 Goodbye Word
Нажмите это, когда другие диалоги завершатся.
Примечание:
Класс TThread обеспечивает дополнительный метод выполнения потока.

Пронизывание это сложная тема - этот раздел касается только поверхности. Такие вопросы как синхронизации потоков, и параллельного управления доступа к данным выходят за области Основ Delphi.

  << Вернуться