Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Непонятка с 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 надо передавать получается указатель на некую структуру! Что за бред? Никогда никакого указателя на структуру не передавал и все работает... чего я не понимаю?


 
Slym ©   (2004-04-22 04:59) [41]

Удалено модератором


 
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;


 
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


 
Verg ©   (2004-04-22 10:04) [46]

C:\Program Files\Borland\Delphi6\Demos\Threads\



Страницы: 1 2 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.033 c
3-1081697458
Mishenka
2004-04-11 19:30
2004.04.11
Добавление записи в таблицу


14-1082439726
bar
2004-04-20 09:42
2004.04.11
Народ. Правда, что студентов лишат отсрочек от армии?


1-1080113655
ViJen
2004-03-24 10:34
2004.04.11
Формы


3-1081851763
Belkova
2004-04-13 14:22
2004.04.11
Роли и права доступа


4-1075607631
Clift
2004-02-01 06:53
2004.04.11
Индикатор языка