在Delphi中使用getTickCount创建等待

时间:2013-12-13 16:14:22

标签: delphi timer wait gettickcount

我正在创建一个我需要运行的程序,然后等待10分钟再继续

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; 

我遇到的问题是,当我到达if语句时,它会检查它是不是真的并继续我如何让它停留并等到语句为真?

1 个答案:

答案 0 :(得分:5)

天真的答案是你需要一个while循环:

while GetTickCount() < StartTime+600000 then
  ;
SecondRun();

或许更容易阅读,repeat循环:

repeat
until GetTickCount() >= StartTime+600000;
SecondRun();

但这是错误的做法。你将热处理器运行10分钟,什么都不做。而且我正在掩饰这样一个事实,即如果你的系统已经运行了49天,那么你将会发现GetTickCount环绕,然后测试逻辑就会出现问题。

操作系统有一个旨在解决您问题的功能,称为Sleep

Sleep(600000);

这会阻止调用线程达到指定的毫秒数。因为线程是块,所以线程在等待时不会占用CPU资源。

这会使调用线程无响应,因此通常会在后台线程而不是应用程序的主线程中执行此操作。