Newsgroup: it.comp.lang.delphi
Titolo: Thread con costruttore overriddato

Ciao a tutti,
io ho creato una classe derivata da TThread e gli ho definito un
costruttore personalizzato in questo modo:
TMyThread.Create(param1,param2);
begin
  inherited(false);  { Ovvero crea il thread non sospeso }
  var1 := param1;
  oggettoX.metodo(param2);
end;
In questo caso il metodo execute è partito subito dopo aver eseguito
il costruttore della superclasse,
o parte dopo l'esecuzione di tutto il codice del mio costruttore?
Grazie in anticipo!

Cosi' esegue prima le due righe di codice
TMyThread.Create(param1,param2);
begin
  var1 := param1;
  oggettoX.metodo(param2);
   inherited Create(false);  { Ovvero crea il thread non sospeso }
end;
Ciao Giorgio 

 o parte dopo l'esecuzione di tutto il codice del mio costruttore?
Per fugare ogni dubbio, potresti creare semplicemente il thread sospeso 
e avviarlo con /Resume/. :-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 e avviarlo con /Resume/. :-)
Be', no, così non si fugano i dubbi, semplicemente si segue una strada
diversa che sicuramente si sa come funziona :-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 end;

Dipende dalla versione di Delphi e della VCL che possiedi. Nelle versioni
piu' vecchie, il thread partiva immediatamente, nelle ultime versioni
parte dopo l'evento AfterConstruction. Credo che il cambiamento sia
avvenuto dalla versione 5.
Questo e' quanto ricordo io, ma potrei sempre ricordare sbagliato ...
Ciao
ACSH


Cosi' esegue prima le due righe di codice
Ma non è una soluzione. Il codice viene comunque eseguito tutto, a
prescindere dal parametro del costruttore.

Grazie per avermi risposto,
Io uso ancora delphi 5, farò una prova per curiosità per vedere se ha
regione ACSH, interessante..

 regione ACSH, interessante..
Beh, guarda l'help. In D7 dice questo:
< inizio cit. >
Executes the thread when the thread is created with CreateSuspended set to
false.
Delphi syntax:
procedure AfterConstruction; override;
Description
AfterConstruction launches the Execute method when the thread is not created
in a suspended state. By calling Execute from the AfterConstruction method
rather than the constructor, TThread avoids a race condition where the
thread may free itself after Execute finishes but before the main thread
calls AfterConstruction.
< fine cit. >
In D5 cosa dice?
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio

Nell'help di D5 AfterCostruction descrive solo TObject:
<Citazione dall'help di D5: TObject.AfterConstruction>
Responds after the last constructor has executed.
procedure AfterConstruction; virtual;
Description
AfterConstruction is called automatically after the object's last
constructor has executed. Do not call it explicitly in your
applications.
The AfterConstruction method implemented in TObject does nothing.
Override this method when creating a class that takes some action
after the object is created. For example, TCustomForm overrides
AfterConstruction to generate an OnCreate event.
Note:	It is only important to override AfterConstruction rather than
the object's constructor if the derived class is used in C++Builder
applications.
</citazione>
Quindi associando queste informazioni con quelle che dà l'help di D7
si capisce che esegue tutti i costruttori e poi lancia l'execute.