alarm(),sleep(),pause()
Posted tianzeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alarm(),sleep(),pause()相关的知识,希望对你有一定的参考价值。
pause():让进程暂停直到信号出现
#include <unistd.h> int pause(void);
函数说明:pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断.
返回值:只返回-1.
错误代码:EINTR 有信号到达中断了此函数.
alarm():设置信号传送闹钟
#include <unistd.h> unsigned int alarm(unsigned int seconds);
函数说明:alarm()用来设置信号SIGALRM 在经过参数seconds 指定的秒数后传送给目前的进程. 如果参数seconds 为0, 则之前设置的闹钟会被取消, 并将剩下的时间返回.
返回值:返回之前闹钟的剩余秒数, 如果之前未设闹钟则返回0.
#include <unistd.h> #include <signal.h> void handler() { printf("hello "); } main() { int i; signal(SIGALRM, handler); alarm(5); for(i = 1; i < 7; i++) { printf("sleep %d ... ", i); sleep(1); } }
//结果 sleep 1 ... sleep 2 ... sleep 3 ... sleep 4 ... sleep 5 ...hello sleep 6 ...
sleep():让进程暂停执行一段时间
#include <unistd.h> unsigned int sleep(unsigned int seconds);
函数说明:sleep()会令目前的进程暂停, 直到达到参数seconds 所指定的时间, 或是被信号所中断.
返回值:若进程暂停到参数seconds 所指定的时间则返回0, 若有信号中断则返回剩余秒数.
总结:
alarm(time);执行之后告诉内核,让内核在time秒时间之后向该进程发送一个定时信号,然后该进程捕获该信号并处理;
pause()函数使该进程暂停让出CPU,但是该函数的暂停和前面的那个sleep函数的睡眠都是可被中断的睡眠,也就是说收到了中断信号之后再
重新执行该进程的时候就直接执行pause()和sleep()函数之后的语句;
以上是关于alarm(),sleep(),pause()的主要内容,如果未能解决你的问题,请参考以下文章
ActionEvent 中的 JavaFX Thread.Sleep() 或 pause()