Meine Versuche funktionieren so nicht...
Delphi-Quellcode:
...
dcExportImport.Compare; // so funktioniert alles, aber ohne Thread
...
CompareThread := TCompareThread.Create(dcExportImport); // so will ich Compare in einem Thread ausführen
...
{ TCompareThread }
constructor TCompareThread.Create(Value: TdcExportImport);
begin
ThreadList.Add(Self); // der Thread wird in eine Liste eingetragen
dcExportImport := Value;
FreeOnTerminate := True;
inherited Create(False);
end;
procedure TCompareThread.Execute;
begin
dcExportImport.Compare; // und Compare im Thread ausgeführt
end;
...
function TdcQuerys.IBSql: TIBSql;
var
I: Integer;
TmpIBSql: TIBSql;
Thread: TThread;
begin // der "Pool" stellt eine freie oder neue IBSql bereit
...
Thread := CurrentThread; // UND SOLLTE HIER ERMITTELN, OB EIN THREAD AKTIV IST
if not Assigned(Thread) then
begin
TmpIBSql.Database := IBDatabase;
TmpIBSql.Transaction := IBTransaction;
end
else
begin
Beep;
TmpIBSql.Database := IBDatabase;
TmpIBSql.Transaction := IBTransaction;
end;
Result := TmpIBSql;
end;
...
function CurrentThread: TThread;
var
Thread: TThread;
I: Integer;
H: THandle;
begin
Result := nil;
for I := 0 to ThreadList.Count - 1 do
begin
Thread := TThread(ThreadList[I]);
if Assigned(Thread) then
begin
H := GetCurrentThread;
if Thread.Handle = H then // hier hätte ich erwartet,
begin // dass der einzige erzeugte
Result := Thread; // Tread hier gefunden wird
Exit; // H hat jedoch den Wert=4294967294
end; // und Thread.Handle=652
end;
end;
end;
Im Test wurde genau 1 Thread erzeugt, der auch in der Liste enthalten ist. Die Handles der Vergleichsfunktion sind jedoch nicht identisch. Wie kann ich erkennen, dass der betreffende Thread gerade "zuständig" ist?
Stahli