• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-进程间的通信之信号的发送alarm

06/03 10:26
118
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

alarm()其实是一个配置定时器的函数,当定时器溢出的时候,内核会向进程发送SIGALRM信号。

1.头文件

#include <unistd.h>

2.函数原型

unsigned int alarm(unsigned int seconds);

3.参数

seconds:以秒为单位设置定时时间,如果在seconds秒时间内再次调用了alarm()函数设置了新的闹钟,则会将之前的覆盖掉,如果后面的seconds配置为0,就是取消之前的定时器配置。

4.返回值

如果之前设置过一个定时器且未触发,alarm 会返回该定时器剩余的秒数。如果之前未设置定时器或定时器已触发,返回值为 0。

5.示例:通过alarm()函数定时处理事件

#include <stdio.h>

#include <unistd.h>

#include <signal.h>

void handle_alarm(int sig) {

printf("Alarm triggered!\n");

}

int main() {

// 注册 SIGALRM 信号处理函数

signal(SIGALRM, handle_alarm);

// 配置第一个定时器为10秒

unsigned int remaining = alarm(10);

printf("First alarm set for 10 seconds, previous alarm remaining time: %u seconds\n", remaining);

// 等待3秒再设置新的定时器

sleep(3);

// 配置新的定时器为5秒,返回之前定时器的剩余时间

remaining = alarm(5);

printf("New alarm set for 5 seconds, remaining time from previous alarm: %u seconds\n", remaining);

// 等待定时器触发

pause();

return 0;

}

6.运行结果

First alarm set for 10 seconds, previous alarm remaining time: 0 seconds

New alarm set for 5 seconds, remaining time from previous alarm: 7 seconds

Alarm triggered!

7.代码解析

第一个 alarm(10) 设置一个10秒的定时器,返回0,因为之前没有设置定时器。sleep(3) 等待3秒。第二次调用 alarm(5) 会取消之前的10秒定时器,并返回它剩余的秒数(约7秒)。5秒后,新的定时器触发,SIGALRM 信号被发送,调用 handle_alarm 函数输出“Alarm triggered!”。

相关推荐