Hallo Leute,
ich habe eine Frage zu der Synchronize Funktion. Ich habe eine Klasse mit einem Array, in dem einige Instanzen von TMyHttpThreads verwaltet werden.
Wie kann ich die Synchronize so aufrufen (TMyHttpThreads.loadComplete),das ich das auch im meiner Klasse TJobQueue mitbekomme. Der Instanzname der TJobQueue kenne ich ja nicht, der wird im Formular vergeben, in der auch die Instanz von TJobQueue erzeugt wird. Ich möchte die Sachen gerne in der TJobQueue kapseln.
Danke für die Hilfe.
unit JobQueueMultiThread;
Delphi-Quellcode:
interface
uses
Classes,HttpGetThreads;
type
TJobQueue = class
private
ThreadArray : array of TMyHttpThreads;
FMaxThreadAnzahl : Integer;
FJoblist : TStringList;
public
constructor create;
destructor destroy;override;
property MaxThreads: integer read FMaxThreadAnzahl write FMaxThreadAnzahl;
property Joblist: Tstringlist read FJoblist write FJoblist;
end; //Type
implementation
uses unit1;
constructor TJobQueue.create;
var loop: ShortInt;
begin
if MaxThreads=0 then MaxThreads:=1; //Default setzen
FJoblist := TStringlist.Create;
for Loop := 0 to MaxThreads do
begin
Setlength(ThreadArray, MaxThreads);
ThreadArray[Loop] := TMyHttpThreads.Create(True);
ThreadArray[Loop].url := 'http://127.0.0.1';
ThreadArray[Loop].Priority := tpIdle;
ThreadArray[Loop].FreeOnTerminate := True;
end;
end;
Delphi-Quellcode:
type
TMyHttpThreads =
class(TThread)
private
{ Private-Deklarationen }
IdHTTP: TIdHTTP;
ContentStream:TStringStream;
procedure loadComplete;
public
url:
string;
protected
procedure Execute;
override;
end;
implementation
uses JobQueueMultiThread;
//Main
procedure TMyHttpThreads.Execute;
begin
{ Thread-Code hier einfügen }
IdHTTP:=TIdHTTP.Create;
ContentStream:= TStringStream.Create(toEOF);
try
IdHTTP.Get(
URL,ContentStream);
except
end;
Synchronize(loadComplete);
IdHTTP.Destroy;
ContentStream.Free;
end;
procedure TMyHttpThreads.loadComplete;
begin
???????????<---------------------<<
end;