![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с TThread... [D6, 2000]
pathfinder © (2005-12-17 22:54:00)Мастера, не подскажете в чем дело? В отдельном процессе запускается цикл, но при его выполнении интерфейс программы не откликается на клики мышки:( Что я делаю не так?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, unit2, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
T1 : TMyThread;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
T1:=TMyThread.Create(false);
T1.Priority := tplowest;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
T1.Terminate;
end;
end.
unit Unit2;
interface
uses
Classes;
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure Run;
end;
implementation
uses sysutils, unit1;
procedure TMyThread.Execute;
begin
Synchronize(run);
end;
procedure TMyThread.Run;
var i: integer;
begin
for i:=1 to 1000000 do Form1.caption:=inttostr(i);
end;
end.
Virgo_Style (2005-12-18 11:26:00) [1]pathfinder (18.12.05 7:24) [2]
В данном случае никак, раз тебе нужна непрерывная работа с VCL. Ну или хотя бы
в Execute
for ... do
begin
Syncronyse(Run);
Sleep(10);
end;
а в Run просто присваивать Form.Caption.
Параметр в Run передать как св-во класса, например.
pathfinder (2005-12-18 07:24:00) [2]А как сделать, чтобы он выполнялся в отдельном потоке?
Delphi (2005-12-18 00:06:00) [3]Всё правельно(ИМХО), проблема в том что метод вызванный методом Synchronize, исполняется в основном потоке VCL.