linux 定时器和sleep,linux中sleep函数的使用和总结
在linux編程中,有時(shí)候會(huì)用到定時(shí)功能,常見的是用sleep(time)函數(shù)來睡眠time秒;但是這個(gè)函數(shù)是可以被中斷的,也就是說當(dāng)進(jìn)程在睡眠的過程中,如果被中斷,那么當(dāng)中斷結(jié)束回來再執(zhí)行該進(jìn)程的時(shí)候,該進(jìn)程會(huì)從sleep函數(shù)的下一條語句執(zhí)行;這樣的話就不會(huì)睡眠time秒了;
頭文件: #include
函數(shù):unsigned int sleep (unsigned int seconds);//n秒
此外:int usleep (useconds_t usec);//n微秒
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include
#include
#include
#include
void?sig_handler(int?num)
{
printf("\nrecvive the signal is %d\n", num);
}
int?main()
{
int?time?= 20;
signal(SIGINT, sig_handler);
printf("enter to the sleep.\n");
sleep(time);
printf("sleep is over, main over.\n");
exit(0);
}
運(yùn)行結(jié)果截圖如下:
從運(yùn)行結(jié)果可以看出,當(dāng)我按下Ctrl+c發(fā)出中斷的時(shí)候,被該函數(shù)捕獲,當(dāng)處理完該信號(hào)之后,函數(shù)直接執(zhí)行sleep下面的語句;
備注:sleep(time)返回值是睡眠剩下的時(shí)間;
下面的例子是真正的睡眠time時(shí)間(不被中斷影響):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include
#include
#include
#include
void?sig_handler(int?num)
{
printf("\nrecvive the signal is %d\n", num);
}
int?main()
{
int?time?= 20;
signal(SIGINT, sig_handler);
printf("enter to the sleep.\n");
//sleep(time);
do{
time?= sleep(time);
}while(time?> 0);
printf("sleep is over, main over.\n");
exit(0);
}
運(yùn)行結(jié)果截圖如下:
備注:其中recevie the signal is 2.表示該信號(hào)是中斷信號(hào);信號(hào)的具體值如下圖所示:
最后是sleep函數(shù)的man手冊(cè),命令為:man 3 sleep
備注:可以使用sleep來實(shí)現(xiàn)定時(shí)發(fā)送機(jī)制,例如server和client通信,定時(shí)發(fā)送數(shù)據(jù)或者定時(shí)接受數(shù)據(jù)(設(shè)置避免打擾時(shí)間內(nèi)不接收數(shù)據(jù)),當(dāng)然定時(shí)接受數(shù)據(jù)可能會(huì)造成數(shù)據(jù)丟失(超過緩存)
總結(jié)
以上是生活随笔為你收集整理的linux 定时器和sleep,linux中sleep函数的使用和总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两台linux服务器负载均衡代码实现,n
- 下一篇: 微博上的微博ID在哪里查看