【发布时间】:2019-10-31 17:58:58
【问题描述】:
来自pause的手册页
pause() 导致调用进程(或线程)进入休眠状态,直到发出终止进程或调用信号捕获函数的信号。
来自sleep的手册页
sleep() 使调用线程休眠,直到秒秒过去或没有被忽略的信号到达。
/* This will wait till the signal arrives and it should be handled */
pause();
/* is it same as the above one */
/* This will also sleep for infinite time untill the signal arrives and it should be handled */
while (1) {
int ret = sleep(3);
if (ret != 0)
break;
}
它们的实现有什么区别?
从应用程序的角度来看,何时使用pause,何时使用sleep。
【问题讨论】:
-
如果您在手机上运行第二个代码 - 不要忘记每天晚上充电... ;-)
-
第二个不一样,因为如果 pause() 通过信号终止,您的程序将继续。然而,你的睡眠循环将再次进入你的循环体并一次又一次地进入睡眠状态......但是你可以从循环中检查是否发生了信号并决定退出循环。
-
感谢@hetepeperfan,我更改了第二种情况的代码。
-
sleep返回“如果请求的时间已过,则返回零,如果调用被信号处理程序中断,则返回休眠的秒数。” -
对,这就是我在回答中已经解释过的。抱歉匆忙发表评论;-)