【发布时间】:2025-12-23 22:20:19
【问题描述】:
我现在正在学习 WIN32 ASM,我想知道是否有类似“空闲”无限循环的东西,它根本不消耗任何资源。基本上我需要一个正在运行的进程来进行实验,如下所示:
loop:
; alternative to sleep...
jmp loop
有什么东西可以让进程闲置吗?
【问题讨论】:
-
代表怎么样?不;?
sleep()、sched_yield()等是要求操作系统执行其他操作的系统调用。您可以在汇编程序中进行这些调用。但这些并不是真正让 CPU 什么都不做的指令,而是更高级别的东西。 -
TerminateProcess() 是停止执行指令的好方法。编写无限循环不是,也没有明显的用处。 HLT 指令只能由特权代码使用。
-
讨厌问一个明显的问题,但是......不睡觉完全按照您的 cmets 对答案的要求做?您希望核心做其他事情或完全空闲一段时间,然后您想要控制权。这就是
Sleep所做的。你为什么要寻找替代品?有什么问题? -
这对汇编语言不好用。当你认为你可以比编译器做得更好时,你会使用汇编语言,通常是为了让事情变得更快。当您的目标是什么都不做时,就不需要速度。
-
@BenjaminWeiss:那么答案是否定的。您希望操作系统安排另一个线程在 CPU 上运行(如果一个线程已准备好运行),或者如果操作系统无法让该内核执行其他工作,则仅让内核暂时休眠.这显然需要调用操作系统,因为只有操作系统调度程序知道该内核在任何特定时间可能执行的其他工作,并且只有操作系统可以安排中断以将内核从睡眠中唤醒。这正是
Sleep所做的具体而准确的事情。