@ChrisE : Er meinte, wie ich das mit meinem Post bezüglich Synchronize meinte.
@ibp : Okay hab mich zugegeben bischen doff ausgedrückt. Ich meinte, dass du das alles ein bischen anders aufbauen kannst, und somit kein Sleep oder sonstiges mehr brauchst.
Delphi-Quellcode:
TMachWasLangesInDerDBThread =
class(TThread)
private
...
FErrorMsg :
String;
//Da man keine Funktion mit Parameter synchronizieren kann
procedure OnErrorDo;
procedure OnFinishDo;
protected
procedure Execute;
override;
public
...
end;
procedure TMachWasLangesInDerDBThread.Execute;
begin
try
fSPQuery.ExecSQL;
except
on e:
exception do
begin
FErrorMsg := e.
Message;
Synchronize(OnErrorDo);
Terminate;
//Zur Sicherheit
end;
end;
Synchronize(OnFinishDo);
Terminate;
//Zur Sicherheit
end;
procedure TMachWasLangesInDerDBThread.OnErrorDo;
begin
ShowMessage(FErrorMsg);
//OnFinishDo; oder was du beim Error sonst nach alles gemacht hättest.
end;
procedure TMachWasLangesInDerDBThread.OnFinishDo;
begin
//z.b. MeinInfoFenster.hide; oder was du nach deiner Schleife gemacht hättest
end;
.... im Hauptprozess Aufruf durch...
...
MeinInfoFenster.show;
aMYThread := TMachWasLangesInDerDBThread.create(...);
aMYThread.FreeOnTerminate := True;
So habe ich dass immer gelöst, wenn ich auf einen Thread warten musste. Damit bleibt das Fenster, wenn überhaupt, nur beim Synchronize-Teil kurz hängen, da beide Thread ja zusammen arbeiten.
Gruß NickelM