Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1704125
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 嵌入式

2018-10-06 11:33:46

关于eloop_register_timeout()
在eloop_register_timeout()中不能调用usleep(),应该再次调用eloop_register_timeout()注册一个定时器以延时。因为仅有1个进程在处理,如果某时刻sleep了,就只能等待sleep结束再做其他事情。

关于setitimer()
在Linux下,setitimer()可以用来实现延时和定时的功能。
在Linux下,系统为每个进程提供了3种timer(对应3个SIG信号),各自有其独有的计时域,当其中任何一个到达,就发送一个相应的信号给进程,并使得计时器重新开始。
       根据如上man setitimer()的说明,可以看出:每个进程中每种timer只允许使用一个(因为SIGNAL固定的),那么想要在linux下的单进程中使用多个定时器,则需要自己写代码并维护管理,可自己百度:Linux 多定时器,(不能使用sleep)。
       另外,关于“信号”:①信号能否打断系统调用,信号能否打断信号处理函数,信号2能否打断信号1处理函数。系统调用有些能被打断,有些不能被打断,同一信号不会打断其信号处理函数(已在Linux多定时器代码中做些修改并验证过),不同信号会打断其他信号的信号处理函数。参考:。②SIGALRM和sleep是否冲突。经过自己试验“SIGALRM和sleep共用SIGALRM信号,会相互打断,即冲突”。③signal和sigaction区别。参考:signal和sigaction的区别

小小科普一下
进程是资源分配的最小单位,线程是处理器调度的最小单位。
单核处理器同一时间只能执行一个线程,即同一时间只能做一件事。
阅读(4675) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~