首页
社区
课程
招聘
[求助]怎么实现0.1豪秒的Sleep?
发表于: 2011-6-27 09:24 6269

[求助]怎么实现0.1豪秒的Sleep?

2011-6-27 09:24
6269
@WaitZero:
    MOV  ECX , Offset aDWord;
    XOR  EAX , EAX;
    MOV  EBX , 1;
    LOCK CMPXCHG [ECX] , EBX;
    JZ   @ZeroOK;
    PUSH 1;
    CALL Sleep;
    JMP  @WaitZero;
  @ZeroOK:

Sleep 最小传1,有没有更快点函数或者释放方法,比如0.1豪秒,怎么实现呢?谢谢
以上代码只是个例子,(EnterCriticalSection那一组实现),只是想看看有没有更快的,少占用CPU就行

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 6
活跃值: (1146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
timeSetEvent 参考 多媒体定时器
2011-6-27 09:53
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
其实windows无法做到0.1ms的sleep, windows基于10ms一次的时钟中断做线程切换与计时
2011-6-27 16:57
0
雪    币: 2314
活跃值: (2205)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
4
R3层好像是不行的.
R0层的DPC定时器可以最小到100ns.
2011-6-27 17:05
0
雪    币: 217
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
参考 多媒体定时器 ,it's the only way....
2011-6-27 17:39
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
6
NTSYSAPI
NTSTATUS NTAPI ZwDelayExecution(  IN BOOLEAN              Alertable,  IN PLARGE_INTEGER       DelayInterval );

Alertable
    If set, execution can break in a result of NtAlertThread call.
    这个可以设置为0。
DelayInterval
    Delay in 100-ns units. Negative value means delay relative to current.
    这个参数是一个指针。

Windows的Sleep大体实现过程:
mov eax,dwMilliseconds
mov ecx,2710h       ;十进制为10000,看到这里你应该知道该怎么发挥了。
mul ecx
neg eax
adc edx,0
neg edx
mov ecx,DelayInterval
mov [ecx],eax
mov [ecx+4],edx
push ecx
push 0
call ZwDelayExecution  ;NTDLL.ZwDelayExecution  
retn 8
2011-6-27 18:17
0
雪    币: 215
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
十分感谢各位,尤其是“无聊的菜鸟”
2011-6-27 20:57
0
雪    币: 144
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
SetWaitableTimer,WaitForSingleObject可实现纳秒级延迟
2011-6-28 22:13
0
游客
登录 | 注册 方可回帖
返回
//