Hallo!
Hab das selbe Problem.
Ein einfaches Sleep(5000) bringt die Endlosmeldung (alle 5 Sekunden) "Projekt reagiert nicht - App schließen / Warten"!
Einfacher Code zum Testen:
Delphi-Quellcode:
procedure TForm1.Sl(sec: Integer);
var s: String;
t1, t2: TDateTime;
begin
t1 := Now;
Sleep(sec * 1000);
t2 := Now;
s := 'Sleep(' + IntToStr(sec * 1000) + '): ';
s := s + FormatDateTime('h:n:s.z', t1);
s := s + ' to ';
s := s + FormatDateTime('h:n:s.z', t2);
Memo1.Lines.Add(s);
end;
Ergebnisse:
Sl(4) -> Memo1 -> 10:18:00.000 to 10:18:04.000
Sl(8) -> Memo1 -> 10.18.00.000 to 10.18:05.096 (also wird nach 5 Sekunden abgebrochen statt der gewünschter 8)!
Das heisst auch er bricht in Mitten der Sleep-Funktion nach 5 Sekunden ab.
Ich frage mich nur wenn ein Code "unerwarteterweise" länger als 5 Sekunden läuft, welche unerwarteten Effekte das haben kann.
Bei "erwarteten" Aktionen die länger dauern können eh kein Problem.
Und das heisst das das alles war nur irgendwie länger dauern KÖNNTE ich es als TThread / TTask implementieren muss.
Das es für diesen Zweck nichts einfacheres und sicheres gibt.
Es wäre ja auch ok wenn der Dialog nicht periodisch immer wieder kommen würde, wenn doch es die Aktion bereits beendet ist ->
ODER soll ich statt Sleep(8000) ein Sleep(4000) und danach ein Sleep(4000) einbauen (simpel dargestellt)??
Ich könnte die ganze App in einen 2. Thread packen...