Erstellen einer warten über getTickCount in Delphi
Ich bin eine Prozedur erzeugen, die muss ich laufen, dann warten Sie 10 Minuten, bevor er auf
procedure firstTimeRun(const document: IHTMLDocument2);
var
fieldValue : string;
StartTime : Dword;
begin
StartTime := GetTickCount();
WebFormSetFieldValue(document, 0, 'Username', '*******');
WebFormSetFieldValue(document, 0, 'Password', '*******');
WebFormSubmit(document, 0);
if (GetTickCount() >= StartTime+ 600000) then
begin
SecondRun();
end;
end;
das problem das ich habe ist wenn ich nach der if-Anweisung überprüfen zu sehen, dass es nicht stimmt und verschieben, wie mache ich es bleiben und warten, bis die Aussage stimmt?
- Kannst du nicht mit einem TTimer?
- Beachten Sie, dass wenn Sie diese in einem Haupt-thread blockiert das UI (für 10 Minuten!). Wenn das so ist, verwenden Sie nicht den vorgeschlagenen Weg, noch versuchen, zu "reparieren", dass der block durch den Aufruf
Application.ProcessMessages
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Naiv die Antwort ist, dass Sie brauchen eine
while
Schleife:Oder vielleicht mehr Lesen, ein
repeat
Schleife:Aber das ist der falsche Weg, es zu tun. Führen Sie den Prozessor heiß für 10 Minuten, und nichts erreichen. Und ich bin gern über die Tatsache, dass, wenn Ihr system wurde für 49 Tage, dann treffen Sie
GetTickCount
wrap-around-und die Logik des Tests ist dann aber fehlerhaft.Des Betriebssystems hat eine Funktion entwickelt, um Ihr problem zu lösen, heißt es
Schlafen
.Diese blockiert den aufrufenden thread für die angegebene Anzahl von Millisekunden. Da der thread blockiert, der thread wird nicht verbraucht CPU-Ressourcen, während er wartet.
Dadurch wird der aufrufende thread nicht mehr reagiert, so ist es in der Regel etwas, was Sie tun würde, in einem hintergrund-thread eher als eine Anwendung der Haupt-thread.
Sleep
.Terminated
flag schlafen so lange, wenn ich wollteTerminate
Sie.