U njemu imam proc Execute u kojoj, nakon što obavim što treba pozovem Terminte.
Kako u programu iz kog sam kreirao thread znam da je thread završio svoje?
Thread mi koristi za sinhronizacije baza, program ga pokreče kada dobije post_event iz baze. Ne znam kada će biti sljedeći i da li će sljedeći doći prije nego je prehdpni thread završio posao. Ja sam dodao property OK koji postavljam na false kada thread završi posao pa ga provjeravam iz programa. Da li može bolje ili jednostavnije? Dolje je kod deklaracije thread-a.
u programu kreiram var myAdressToWeb
myAdressToWeb = tAdressToWeb.Create(ID);
u procedure tAdressToWeb.Create sam dodao:
FreeOnTerminate := true;
u proceduri tAdressToWeb.Execute posljenji je radak:
Terminate;
Provjera iz programa na način:
if Assigned(AdressToWeb) then ...
ne vrača ispravnu vrijednost, tj. vrati uvijek true, bez obzira da li je thread još aktivan ili je završio svoje.
tAdressToWeb = class(TThread)
private
fOk: boolean;
fIO: integer;
fDataBase: TIBDatabase;
qLocal: tMyQry;
qWeb: TADOCommand;
fMySQL: tMySQL;
fAdoCon: TADOConnection;
function IsPuttyRun: boolean;
function StartPutty: boolean;
function GetInsertSQL(Value: tMyQry): string;
function Dat2MySQL(Value: string): string;
protected
procedure Execute; override;
public
constructor Create(ID: integer);
destructor Destroy; override;
property OK: boolean read fOk write fOk;
end;
Još jedno pitanje: ako trebam startati isti thread prije nego je predhodni završio svoj posao. Kako? U programu koristim var myAdressToWeb za kriranje objekta, predpostavljam da nju ne mogu koristiti ponovo prije nego sam za predhodni napravio free. Pokušao sam preko iste varijeble, tj. kreirati pnovo thread a da predhodni nije završio - oba su ispravno obavila svoj posao. Kako to i smije li to tako?
Da li upoće treba raditi free ako je postavljen FreeOnTerminate := true; i pzvan u threadu: Terminate ?
[Ovu poruku je menjao franjo_tahi dana 11.02.2011. u 13:56 GMT+1]