• Главная
  • Исходники Delphi
  • Справочники Delphi
  • Книги Delphi
  • Основы Delphi
  • библиотека Delphi исходников
  • Форум
  • Блоги

Последние записи

  • Прозрачность тайлсета в TPNGImage
  • Как сделать VBA макрос в excel
  • Поиск по столбцу 1-ого не нулевого значения (формулой в Microsoft Office Excel)
  • Простановка единиц в ячейки под объектами (Microsoft Office Excel)
  • Расчет затраченного времени между определенным рабочим временем (формулой в Microsoft Office Excel)
  • Мигающий экран на Assembler
  • VBA-макрос по копированию 10 строчек в выбранном диапазоне в Microsoft Office Excel
  • Копирование только нужного диапазона в Microsoft Office Excel
  • Перенос диапазона стоки в Microsoft Office Excel на другой лист по условию
  • Мелодия в Pascal.ABC.Net с помощью System.Console.Beep — задержка воспроизведения звука

made in programmersforum 3

programmersforum3

  • .NET
  • ASP.NET
  • assembler
  • Basic
  • c/c++
  • CMS
  • Delphi
  • HTML
  • iPhone
  • Java
  • JavaScript
  • Linux
  • Pascal
  • Perl
  • Photoshop
  • php
  • Python
  • Ruby
  • SEO
  • sql
  • VBA
  • Win Api
  • Windows
  • XML и XSLT
  • Администрирование ОС
  • Апгрейды
  • Архив
  • Безопасность
  • Блоги
  • Веб-аналитика
  • Железо
  • Журнал
  • Заметки
  • Имейдж
  • Интервью
  • Исходники
  • Новости
  • Общалка
  • Операционные системы
  • Пост-обзор
  • Профлитература
  • Рассылка
  • Реклама
  • си шарп
  • Советы
  • Софт
  • Статьи
  • Топик-обзор
  • Файлы








19th
Мар

Пример использования потока в форме

Posted by Chas under Delphi

Нужно, чтобы при нажатии на кнопку «Остановить» поток завершался и выполняемый скрипт останавливался.

unit frm_Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TFormMain = class(TForm)
BStart2: TButton;
BCheck2: TButton;
procedure BStart2Click(Sender: TObject);
procedure BCheck2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TMyThread2 = class(TThread)
private
{ Private declarations }
i: Integer;
protected
procedure Execute; override;
procedure SyncProc;
public
end;

var
FormMain: TFormMain;
MyThread2: TMyThread2;

implementation

{$R *.dfm}

procedure TFormMain.BStart2Click(Sender: TObject);
begin
if BStart2.Tag = 0 then
begin
BStart2.Tag := 1;
BStart2.Caption := 'Стоп';

MyThread2 := TMyThread2.Create(True); // После создания поток остановлен
MyThread2.FreeOnTerminate := True; // После завершения работы поток "не умрёт" сам
MyThread2.Resume; // Запуск потока
end
else
begin
BStart2.Tag := 0;
BStart2.Caption := 'Старт';
// Поток не прекращает свою работу
// НЕ УБИВАЕТ поток, а просто выставляет свойство Terminated в True
// Поток сам должен следить (в теле Execute) за тем, когда должен умереть
// Жёстко уничтожить поток можно с помощью TerminateThread, но делать этого нельзя, потому как утечки памяти как минимум... ну и прочие неприятности
MyThread2.Terminate;
end;
end;

procedure TMyThread2.Execute;
var
i2: Integer;
begin
for i2 := 0 to 60 do
begin
if Self.Terminated then Exit; // Если главный поток приказал - умираем

if i2 > 61 then Break;
Sleep(100);
i := i2;
Synchronize(SyncProc);
end;

Terminate;
end;

procedure TMyThread2.SyncProc;
begin
FormMain.Caption := IntToStr(i);
end;

procedure TFormMain.BCheck2Click(Sender: TObject);
begin
// Проверка на существование потока
if MyThread2 <> nil then
begin
// Если поток умирает "мирно", штатно завершив работу
if MyThread2.Terminated then ShowMessage('Поток "MyThread2" не работает') else ShowMessage('Поток "MyThread2" работает');
end else ShowMessage('Поток "MyThread2" не создан');
end;

end.

тема на форуме

Похожие статьи

  • Автоматическая очередь потоков
  • Скелет потока с процедурой Terminate
  • Проверить состояние потока
  • Создание своего класса потока
  • Использование таймера в потоке
  • Как можно выполнить процедуру с параметрами через поток?
  • Как передать параметр в поток?
  • Как иcпользовать методы canvas в потоке?
  • Процессы vs потоки
  • Как организовать общение формы и потока?
Теги: Thread | поток | потоки | форма








© Copyright "Клуб программистов" – материалы по Delphi и С++. Создание и продвижние сайта - Веб-сателлит.