Native NT 延时

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秒钟,呵呵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值