首页
论坛
课程
招聘

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

2008-1-31 21:35 4501

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

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

[求职]想求职找工作,请来看雪招聘投递简历!

最新回复 (2)
Aaah 2008-2-1 10:31
2
0
安全性问题考虑过没有,我遍历你的进程,打开这个event句柄,然后SetEvent,你的程序逻辑会不会出问题?
NWMonster 1 2008-2-1 11:33
3
0
对系统版本依赖太大,不建议使用。
游客
登录 | 注册 方可回帖
返回