在Windows下只要uses Windows,就有這兩個API可調用GetTickCount,GetCurrentThreadID
如果我們需要跨平台使用這兩個函數,就不能僅僅Uses Windows了。
如果需要跨平台使用GetTickCount,可以uses System.Classes,然後使用類方法:TThread.GetTickCount
如果需要跨平台使用GetCurrentThreadID,則僅需引用不同的單元即可:
uses
{$ifdef MSWINDOWS}
Windows;
{$endif}
{$ifdef POSIX}
Posix.Pthread;
{$endif}
這個段程序是一個“延時”過程。
GetTickCount是返回一個DWORD類型,其返回的值是自系統啟動以來所經歷的時間,單位:毫秒。
此段代碼基本原理就是:
先GetTickCount取值賦於Start_Time,然後不停的循環用GetTickCount來和Start_Time來相減,直到這個差值大於參數DelayTime則退出循環結束過程,從而達到延時的目的。為了不造成程序因此間循環而停止響應,故在循環中用了Application.ProcessMessage來手動使程序響應系統信息。
procedure Delay(dwMilliseconds: DWORD); //Longint
var
iStart, iStop: DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
T:Tedit;
begin
for i := 1 to 3 do
begin
T:=Findcomponent('Edit'+inttostr(i)) as TEdit;
if T<>nil then T.Text:='str'+inttostr(i);
delay(500);
end;
ShowMessage('OK');
end;