Timer Signal Action Handler is not Interrupt!
下面这段程序是Timer定时2秒发送向本进程发送信号,进程收到信号后执行对应的信号处理函数:
act.sa_handler = prompt_info;
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#define PROMPT "Time Passed 2 Seconds"
char *prompt = PROMPT;
void prompt_info(int signo)
{
printf("%s\r\n", prompt);
}
void init_sigaction(void)
{
struct sigaction act;
act.sa_handler = prompt_info;
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF, &act, NULL);
}
void init_time(void)
{
struct itimerval value;
value.it_value.tv_sec = 2;
value.it_value.tv_usec = 10000;
value.it_interval = value.it_value;
setitimer(ITIMER_PROF, &value, NULL);
}
int main(void)
{
init_sigaction();
init_time();
while(1)
{
//sleep(1);
//getchar();
}
return 0;
}
/***************************************************/
输出结果:
Time Passed 2 Seconds
Time Passed 2 Seconds
Time Passed 2 Seconds
.........
.........
如果程序改为
while(1)
{
sleep(1);
//getchar();
}
打开while(1)中的任何一句都将导致没有输出,原因是:这两句都将进程挂起,无法响应定时器处理函数。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
FB-PLC溫度量測及溫度PID控制
FB-PLC LINK功能之應用
博通退出UALink董事会后加入OCP的ESUN计划
收成不错!
OpenAI 与 NVIDIA、AMD 和 Broadcom 一起提升全球计算能力 — 保护 26 GW 的 AI 基础设施
三菱FX系列PLC教程 23 —— FX系列的主控及主控复位指令(MC、MCR)
用SL4112构成的BTL电路
三菱FX系列PLC教程 21 —— FX系列的微分输出指令(PLS PLF)
FBe系列PLC使用者手冊(基礎篇)
拆解:华为Pura X
FBe系列PLC使用者手冊(硬體篇)
你知道亲嘴的味道吗?
TDA2030A音频功率放大器的BTL应用电路
μPC188H 20W音频功率放大电路
生涯规划前提----先认识和了解自己
为什么选择 PCIe 5.0 来满足边缘的功耗、性能和带宽?
μPC 2002 9W音频功率放大电路
三菱FX系列PLC教程 25 —— FX系列的步进指令概述
女人醉酒后的十种姿势
博通的Thor Ultra:与英伟达的人工智能网络战争的新战线
三菱FX系列PLC教程 22 —— FX系列的置位与复位指令(SET RST)
FB-PLC內部之記憶體配置及其單點(數位)與暫存器明細
OpenAI与博通合作设计自己的AI芯片
谷歌宣布投资150亿美元在印度人工智能数据中心
通用汽车将遭受 16 亿美元的打击,因为电动汽车的税收优惠被削减和排放规则放宽
ULN3702Z/TDA2002A 12W音频功率放大电路
三菱FX系列PLC教程 24 —— FX系列的梯形图编程规则
了解 CAM归一化过程以及如何避免 CAM hold
从苹果和华为的产品看如何重新划定智能手机行业的界限
现代经典解释(爆笑)