在Delphi中使用getTickCount创建等待

0 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; 
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 5

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

while GetTickCount() < StartTime+600000 then
  ;
SecondRun();
Run Code Online (Sandbox Code Playgroud)

或者更容易阅读,一个repeat循环:

repeat
until GetTickCount() >= StartTime+600000;
SecondRun();
Run Code Online (Sandbox Code Playgroud)

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

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

Sleep(600000);
Run Code Online (Sandbox Code Playgroud)

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

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