Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизПроблема с TThread... Найти похожие ветки
← →
pathfinder (2005-12-17 22:54) [0]Мастера, не подскажете в чем дело? В отдельном процессе запускается цикл, но при его выполнении интерфейс программы не откликается на клики мышки:( Что я делаю не так?
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.
← →
Delphi (2005-12-18 00:06) [1]Всё правельно(ИМХО), проблема в том что метод вызванный методом Synchronize, исполняется в основном потоке VCL.
← →
pathfinder (2005-12-18 07:24) [2]А как сделать, чтобы он выполнялся в отдельном потоке?
← →
Virgo_Style © (2005-12-18 11:26) [3]pathfinder (18.12.05 7:24) [2]
В данном случае никак, раз тебе нужна непрерывная работа с VCL. Ну или хотя бы
в Execute
for ... do
begin
Syncronyse(Run);
Sleep(10);
end;
а в Run просто присваивать Form.Caption.
Параметр в Run передать как св-во класса, например.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.008 c