![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Thread - To ALL HELP!! [D5]
Eraser © (2002-01-21 13:00:00)Пишу следующий код:
var c:integer;
procedure TMicro3Thread.UpdateCaption;
begin
Form1.Caption := inttostr(c);
end;
procedure TMicro3Thread.Execute;
begin
Rab;
end;
procedure Rab;
begin
for i:=1 to 10000 do begin
inc(с);
Synchronize(UpdateCaption);
end;
end;
в Caption выводится только 1-е значение с и все хотя цикл продолжается
Eraser (2002-01-22 16:06:00) [1]он занимает 3 страницы. ну а так у меня в программе 2 Synchronize:
Synchronize(UpdateCaption) и Synchronize(UpdateCaption1) для разных объектов основной формы
panov (2002-01-22 13:36:00) [2]Возможно, у тебя в процедуре rab еще используются объекты основного потока. Приведи ее код.
Eraser (2002-01-22 13:18:00) [3]поток описан отдельным модулем ThreadObject и Synchronize(UpdateCaption) отрабатывает каждый раз но caption меняется только при первом проходе цикла ??
Rem (2002-01-21 16:17:00) [4]У меня это работает, да и не может не работать.
type
TMicroThread = class(TThread)
protected
procedure UpdateCaption;
procedure Execute; override;
procedure Rab;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var c: integer;
procedure TMicroThread.UpdateCaption;
begin
Form1.Caption := inttostr(c);
end;
procedure TMicroThread.Execute;
begin
Rab;
end;
procedure TMicroThread.Rab;
var
i: integer;
begin
for i:=1 to 10000 do
begin
inc(c);
Synchronize(UpdateCaption);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TMicroThread.Create(false);
end;
end.
panov (2002-01-21 16:06:00) [5]TT = class(TThread)
c: Integer;
protected
procedure Execute;override;
public
procedure DoUpdate;
end;
implementation
uses
ufMainFormCBFiscal;
procedureTT.DoUpdate;
begin
fMainFormCBFiscal.Label1.Caption := IntToStr(c);
end;
procedureTT.Execute;
var
cc: Integer;
begin
for cc := 0 to 10000 do
begin
c := cc;
Synchronize(DoUpdate);
end;
end;
Eraser (2002-01-21 15:52:00) [6]ответьте что-нибудь полезное
Eraser (2002-01-21 14:12:00) [7]>Maslov
Rab описана в ТMicro1Thread
>yaJohn
Synchronize я использую потому что в каждом TthreadObject Написано:
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TMicro3Thread.UpdateCaption;
begin
Form1.Caption := "Updated in a thread";
end; }
>Vovochka
что-то не получается где ее надо написать
yaJohn (2002-01-21 13:17:00) [8]Ispolzovanie Thread v dannom sluchae pochti ekvivalentno prosto gluhomu ciklu v programme. Pochemu? Ob etom uje neodnokratno pisali. Podumayte, chto delaet procedura Synchronize.
Chto doljno poluchitsia v itoge?
Dimka Maslov (2002-01-21 13:11:00) [9]Rab доложна быть методом класса TMicro3Thread
Vovochka (2002-01-21 13:07:00) [10]Form.refresh()?