Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизНепонятка с TThread. Найти похожие ветки
← →
Piter © (2004-04-21 23:34) [40]Кстати, посмотрел тут реализацию TThread.Synchronize и сразу не понял:
я привык ей передавать метод, который надо вызывать из главного потока. Ну это и правильно, работает.
Но в исходниках читаем, ей вот что передается:
TThread.Synchronize(ASyncRec: PSynchronizeRecord)
причем
PSynchronizeRecord = ^TSynchronizeRecord;
TSynchronizeRecord = record
FThread: TObject;
FMethod: TThreadMethod;
FSynchronizeException: TObject;
end;
То есть, процедуре Synchronize надо передавать получается указатель на некую структуру! Что за бред? Никогда никакого указателя на структуру не передавал и все работает... чего я не понимаю?
← →
Piter © (2004-04-21 23:34) [40]Кстати, посмотрел тут реализацию TThread.Synchronize и сразу не понял:
я привык ей передавать метод, который надо вызывать из главного потока. Ну это и правильно, работает.
Но в исходниках читаем, ей вот что передается:
TThread.Synchronize(ASyncRec: PSynchronizeRecord)
причем
PSynchronizeRecord = ^TSynchronizeRecord;
TSynchronizeRecord = record
FThread: TObject;
FMethod: TThreadMethod;
FSynchronizeException: TObject;
end;
То есть, процедуре Synchronize надо передавать получается указатель на некую структуру! Что за бред? Никогда никакого указателя на структуру не передавал и все работает... чего я не понимаю?
← →
Slym © (2004-04-22 04:59) [41]Удалено модератором
← →
Slym © (2004-04-22 04:59) [41]Удалено модератором
← →
Slym © (2004-04-22 05:00) [42]Удалено модератором
← →
Slym © (2004-04-22 05:00) [42]Удалено модератором
← →
Slym © (2004-04-22 05:12) [43]сори за двойной пост
сама реализация корявая:
поток зана кнопку!
типа...
type
TMyThread = class(TThread)
private
x,y:integer;
color:TColor;
FCanvas:TCanvas;
protected
procedure Execute; override;
public
Constructor create(Canvas:TCanvas;Suspended:boolean);reintroduse;
end;
TForm1 = class(TForm)
Button:doitMotherFucker;
private
MyThread:TMyThread;
end;
var Form1: TForm1;
implementation
{$R *.DFM}
Constructor TMyThread.Create(Canvas:TCanvas;Suspended:boolean);
begin
FCanvas:Canvas;
inherited Create(Suspended);
end;
procedure TMyThread.SetPoint;
begin
FCanvas...(x,y,color)//рисуем точку
end;
procedure TMyThread.Execute;
begin
while not Terminated do
begin
//Вычислил точку
x:=...
y:=...
color:=...
Synchronize(SetPoint);
end;
end;
doitMotherFucker.Click
begin
MyThread:=TMyThread.Create(Canvas,true);
MyThread.FreeOnTerminate:=true;
MyThread.Priority:=tpNormal;
MyThread.Resume;//!!! минимум
end;
← →
Slym © (2004-04-22 05:12) [43]сори за двойной пост
сама реализация корявая:
поток зана кнопку!
типа...
type
TMyThread = class(TThread)
private
x,y:integer;
color:TColor;
FCanvas:TCanvas;
protected
procedure Execute; override;
public
Constructor create(Canvas:TCanvas;Suspended:boolean);reintroduse;
end;
TForm1 = class(TForm)
Button:doitMotherFucker;
private
MyThread:TMyThread;
end;
var Form1: TForm1;
implementation
{$R *.DFM}
Constructor TMyThread.Create(Canvas:TCanvas;Suspended:boolean);
begin
FCanvas:Canvas;
inherited Create(Suspended);
end;
procedure TMyThread.SetPoint;
begin
FCanvas...(x,y,color)//рисуем точку
end;
procedure TMyThread.Execute;
begin
while not Terminated do
begin
//Вычислил точку
x:=...
y:=...
color:=...
Synchronize(SetPoint);
end;
end;
doitMotherFucker.Click
begin
MyThread:=TMyThread.Create(Canvas,true);
MyThread.FreeOnTerminate:=true;
MyThread.Priority:=tpNormal;
MyThread.Resume;//!!! минимум
end;
← →
Evgeny V © (2004-04-22 06:59) [44]Slym © (22.04.04 04:59) [41] - грубовато, некрасиво
> procedure TForm1.PaintDecl(Rect1, Rect2: TRect; var bitmap:TBitMap);
> // прорисовка фракрала
> begin
> THRect1:=Rect1;
> THRect2:=Rect2;
> MyThread.Execute;// самый прикольный орех!!!!
> никакой поток не запускается... код выполняется в потоке
> приложения!!!
> MyThread.Resume;//!!! минимум
> end;
MyThread.Execute;//никакой поток не запускается... код выполняется в потоке -
обратил внимание - молодец, а с речью аккуратней надо. И компилятор не пропустит такое, вызов защищенного метода из класса, не являющегося наследником в данном случае класса TThread.
← →
Evgeny V © (2004-04-22 06:59) [44]Slym © (22.04.04 04:59) [41] - грубовато, некрасиво
> procedure TForm1.PaintDecl(Rect1, Rect2: TRect; var bitmap:TBitMap);
> // прорисовка фракрала
> begin
> THRect1:=Rect1;
> THRect2:=Rect2;
> MyThread.Execute;// самый прикольный орех!!!!
> никакой поток не запускается... код выполняется в потоке
> приложения!!!
> MyThread.Resume;//!!! минимум
> end;
MyThread.Execute;//никакой поток не запускается... код выполняется в потоке -
обратил внимание - молодец, а с речью аккуратней надо. И компилятор не пропустит такое, вызов защищенного метода из класса, не являющегося наследником в данном случае класса TThread.
← →
panov © (2004-04-22 09:53) [45]>Piter
Не там искал.
classes.pas
procedure TThread.Synchronize(Method: TThreadMethod);
var
SyncProc: TSyncProc;
begin
← →
panov © (2004-04-22 09:53) [45]>Piter
Не там искал.
classes.pas
procedure TThread.Synchronize(Method: TThreadMethod);
var
SyncProc: TSyncProc;
begin
← →
Verg © (2004-04-22 10:04) [46]C:\Program Files\Borland\Delphi6\Demos\Threads\
← →
Verg © (2004-04-22 10:04) [46]C:\Program Files\Borland\Delphi6\Demos\Threads\
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.05 c