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)


相关推荐

  • 交通灯控制逻辑电路设计实验报告_交通灯控制电路的设计报告

    交通灯控制逻辑电路设计实验报告_交通灯控制电路的设计报告交通灯控制逻辑电路设计这是一个数电实验,交通灯,如果使用FPGA或者单片机来完成的话,会简单很多,这里采用的是使用常规的计数器,触发器,门电路等基本器件搭建,扩展部分可以完成总通行时间在100s内任意设置,红、黄、绿灯亮的时间长短之和在100s内任意设置,其实想要超过100s只需要扩展相应的计数器,以及门电路即可,限制功能的往往是资源;一、选题背景1.1、应用背景为了确保十字路口的车辆顺利、畅通地通过,往往都采用自动控制的交通信号灯来进行指挥。其中红灯(R)亮表示该条道路禁止通行;黄灯(Y)亮表示停

  • 图tp delDataById问题

    图tp delDataById问题

    2021年10月14日
  • php中urldecode()和urlencode()起什么作用啊

    php中urldecode()和urlencode()起什么作用啊

  • mybatiscodehelperpro使用_ios10越狱后必装插件

    mybatiscodehelperpro使用_ios10越狱后必装插件目录一、前言二、安装插件MyBatisCodeHelperPro插件三、激活一、前言在开发中编写生成bean,mapper,mapper.xml即费时也费力,可以通过MyBatisCodeHelperPro自动生成bean,dao,mapper.xml等文件,然后根据自己的需要进行修改。MyBatisCodeHelperPro是IDEA下的一个插件,类似于mybatisplugin,但是是收费的,但可以进行激活使用:下面这个大佬的个人主页上有多个版本的下载链…

  • A站、B站、C站、D站、E站、F站、G站、H站、I站、J站、K站、L站、M站、N站、T站…Z站 ?

    A站、B站、C站、D站、E站、F站、G站、H站、I站、J站、K站、L站、M站、N站、T站…Z站 ?A站AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于AnimeComicFun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。B站全称“哔哩哔哩(bilibili)”,是一家弹幕视频网站,前身是Mikufans,Miku也就是初音未来。主要是以鬼畜、动漫、.

  • c# restsharp官网_hbase shell put

    c# restsharp官网_hbase shell putusingSystem;usingSystem.Net.Http;usingSystem.Threading.Tasks;usingSystem.Collections.Generic;usingNewtonsoft.Json;usingSystem.Net;usingSystem.IO;usingSystem.Text;usingRestSharp;namespaceHttpClientQuery{classPageInfo{publicintstar

发表回复

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

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