Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.62 MB
Время: 0.036 c
14-1080142691
panov
2004-03-24 18:38
2004.05.09
Двадцатка самых популярных вопросов.


11-1066745911
puky
2003-10-21 18:18
2004.05.09
MHXPStyle + D5


4-1079123806
dkDimon
2004-03-12 23:36
2004.05.09
Окно, которого нет в taskbar


4-1078824354
X9
2004-03-09 12:25
2004.05.09
Вопрос при запуске exe-шников из Internet Explorer а


7-1080207035
Insert
2004-03-25 12:30
2004.05.09
Инфо о жестком диске





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский