linux的sleep「建议收藏」

linux的sleep「建议收藏」linux的sleep函数会阻塞当前主线程几秒钟但是这个sleep不产生SIGALRM信号通过下例可得#include<stdio.h>#include<stdlib.h>#include<sys/time.h>#include<signal.h>#include<sys/select.h>#include&…

大家好,又见面了,我是你们的朋友全栈君。

linux的sleep函数会阻塞当前主线程几秒钟 但是这个sleep不产生SIGALRM 信号 通过下例可得
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
#include<sys/select.h>
#include<memory.h>
struct itimerval setvalue;
void RST(int sig)
{

if(sig==SIGALRM)
{

setvalue.it_value=setvalue.it_interval;
printf(“int hello\n”);
}
}
int main(void)
{

memset(&setvalue,0,sizeof(setvalue));
setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=3;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_REAL,&setvalue,NULL);

setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=3;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_VIRTUAL,&setvalue,NULL);
signal(SIGALRM,RST);
setvalue.it_interval.tv_sec=3;
setvalue.it_interval.tv_usec=0;
setvalue.it_value.tv_sec=1;
setvalue.it_value.tv_usec=0;
setitimer(ITIMER_PROF,&setvalue,NULL);
struct timeval t;
t.tv_sec=1;
t.tv_usec=0;
while(1)
{
	struct itimerval value;
	getitimer(ITIMER_REAL,&value);
	printf("ITIMER_REAL: internal:%lds%ldms,remain:%lds%ldms\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);

	getitimer(ITIMER_VIRTUAL,&value);
	printf("ITIMER_VIRTUAL:internal:%lds%ldms,remain:%lds%ldms\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);

	getitimer(ITIMER_PROF,&value);
	printf("ITIMER_PROF: internal:%lds%ldms,remain:%lds%ldms\n\n",value.it_interval.tv_sec,value.it_interval.tv_usec,value.it_value.tv_sec,value.it_value.tv_usec);
	sleep(1);
}

}
从这个例子内 我测试得到 内核不会自动给ITIMER_REAL的it_value的值重新赋值it_interval 所以我在每次it_value递减到0的时候进行设定一个CALLBACK函数进行自动设定it_value 有时候程序自动退出的原因就是SIGALRM的缺省处理的结果 我们需要自己手动设定一个信号接收后的处理比如SIG_IGN 忽略信号 SIG_DEF恢复系统默认处理方式 这里我声明SIGALRM的默认处理方式是会中断当前进程的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160496.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 人何以堪

    人何以堪

  • 引言

    引言

  • 3.7v锂电池升压电路_电池升压

    3.7v锂电池升压电路_电池升压FS2114的PCB布局设计建议-基础篇开关电源的一个常见问题是“不稳定”的开关波形。有时,波形抖动很明显,可以听到从磁性元件发出噪声。如果问题与印刷电路板(PCB)布局有关,则很难确定原因。EMC也是很注重(PCB)布局,这就是为什么在开关电源设计的早期正确布局PCB至关重要的原因。其重要性不可夸大。原理图走线主要器件放置并联一个旁路电容0.1uFLX节点FB反馈电阻R1,R2COUT电容容易影响输出的布线功率组件的推荐焊盘图案GND功率地的PCB布线电感器选择概述FS2

  • 显性与隐性URL转发替代方案[通俗易懂]

    显性与隐性URL转发替代方案[通俗易懂]本文主要介绍了特殊情况下显性与隐性URL转发替代方案。

    2022年10月19日
  • CSS + HTML导航栏效果

    CSS + HTML导航栏效果今天写了一个导航栏,需要的效果如下:实现的代码思路如下:&lt;!DOCTYPEhtml&gt;&lt;htmllang="en"&gt;&lt;head&gt; &lt;metacharset="UTF-8"&gt; &lt;title&gt;导航栏&lt;/title&gt; &lt;styletype="text/css"

  • idea2022.01 激活码【中文破解版】2022.03.07

    (idea2022.01 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号