use NT native API (all from NTDLL.dll) to replace Sleep function.
-------VC++ code------
NTSTATUS
NTAPI
NtCreateEvent(
OUT PHANDLE EventHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN EVENT_TYPE EventType,
IN BOOLEAN InitialState );
NTSTATUS
NTAPI
NtWaitForSingleObject(
IN HANDLE ObjectHandle,
IN BOOLEAN Alertable,
IN PLARGE_INTEGER TimeOut );
NTSTATUS
NTAPI
NtClose(
IN HANDLE ObjectHandle );
LARGE_INTEGER lTime;
HANDLE hE;
NtCreateEvent(&hE, EVENT_ALL_ACCESS, NULL, 0, 0);
lTime.QuadPart = -5*10000000; // delay 5 secs
// delay 1 sec : lTime.QuadPart = -1*10000000;
NtWaitForSingleObject(hE, 0, &lTime);
NtClose(hE);
使用Native API来取代Sleep函数的方法:
------Delphi code------
var
lTime: LARGE_INTEGER;
hE: THANDLE;
i: Cardinal;
begin
NtCreateEvent(@hE, EVENT_ALL_ACCESS, nil, NotificationEvent, False);
lTime.QuadPart := -5*10000000; // 延时5秒
i := NtWaitForSingleObject(hE, False, @lTime);
ShowMessage(IntToHex(i, 8));
NtClose(hE);
end;
注意的是:延时参数居然使用负数,还是-1000*1000*10才是1秒钟,呵呵