关于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的区别。
小小科普一下:
进程是资源分配的最小单位,线程是处理器调度的最小单位。
单核处理器同一时间只能执行一个线程,即同一时间只能做一件事。
阅读(4928) | 评论(0) | 转发(0) |