首页
论坛
课程
招聘
鸡蛋壳
雪    币: 206
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
456
回帖
3147
粉丝
1

[系统底层] [转帖]使用native API替代SLEEP函数

2008-1-31 21:35 4534

[系统底层] [转帖]使用native API替代SLEEP函数

2008-1-31 21:35
4534
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;

[看雪官方培训]《安卓高级研修班(网课)》9月班开始招生!挑战极限、工资翻倍!

最新回复 (2)
Aaah
雪    币: 159
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
10
回帖
236
粉丝
0
Aaah 活跃值 2008-2-1 10:31
2
0
安全性问题考虑过没有,我遍历你的进程,打开这个event句柄,然后SetEvent,你的程序逻辑会不会出问题?
NWMonster
雪    币: 100
活跃值: 活跃值 (12)
能力值: ( LV5,RANK:60 )
在线值:
发帖
26
回帖
458
粉丝
2
NWMonster 活跃值 1 2008-2-1 11:33
3
0
对系统版本依赖太大,不建议使用。
游客
登录 | 注册 方可回帖
返回