Demo1:
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
using namespace std;
void handler(int) {
printf("Hello\n");
signal(SIGALRM,handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(5);
}/*这段函数的执行时间不计算在for循环的时间之内*/
main()
{
int i;
handler(1);
pause();
printf("hi\n");
}
输出:
image.png
Demo2:
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
using namespace std;
void handler(int) {
printf("Hello\n");
signal(SIGALRM,handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(5); // 间隔为5s
}/*这段函数的执行时间不计算在for循环的时间之内*/
main()
{
int i;
handler(1);
while(1);
//pause();
//printf("hi\n");
}
输出:
image.png
Demo3:
当存在两个信号量的时候,执行后面那个信号量的设定。
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
using namespace std;
void handler(int) {
printf("Hello\n");
signal(SIGALRM,handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(2);
}/*这段函数的执行时间不计算在for循环的时间之内*/
void handler2(int) {
printf("Hi\n");
signal(SIGALRM,handler2); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(2);
}/*这段函数的执行时间不计算在for循环的时间之内*/
main()
{
int i;
handler(1);
handler2(1);
while(1);
//pause();
//printf("hi\n");
}
输出:
image.png
Demo4
就是不能这么写。
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
using namespace std;
void handler1(int) {
printf("hi");
}
void handler2(int) {
printf("ksdjf");
signal(SIGALRM,handler1); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler
alarm(2);
}/*这段函数的执行时间不计算在for循环的时间之内*/
main()
{
int i;
handler2(1);
while(1);
//pause();
//printf("hi\n");
}
输出为空。