EDA365电子论坛网
标题:
linux下多定时器+线程池的实现
[打印本页]
作者:
thinkfunny
时间:
2021-3-30 17:23
标题:
linux下多定时器+线程池的实现
linux只允许单进程拥有一个定时器,因此在linux下的单进程中要使用多个定时器,则需要自己维护管理
4 a: t) U1 \6 E' J0 S% W4 W
6 ]: n3 A) T; ?% H6 v6 I, J
这个实现允许用户使用多个自定义的定时器,每个自定义的定时器将周期地被触发直到其被删除。实现的主要思路是:
3 M+ t% F8 @# Y' O' o8 B# F9 K
: o$ G( G% l+ }* w
i)首先在初始化多定时器(init_mul_timer)时利用setitimer注册一个基本的时间单位(如1s)的定时事件;
: W% J% L# ~7 f9 ` G9 S$ u
4 d' S: A) w, S) {+ m9 p
ii)用户需要set_a_timer注册自定义定时器时,在timer_manage管理结构中记录这个定时器的回调函数和定时周期等参数;
3 w8 j; _* ]. D( r g+ f
( i B0 k* r+ d+ ~
iii)当基本的时间单位到期后(如SIGALRM信号到达时),遍历整个timer_manage,如果有自定义定时器的超时时间到了,就执行相应的回调函数,并将自定义定时器的超时时间置为最初值;否则将自定义定时器的超时时间相应地减一个基本的时间单位;
$ [& ]" N9 L" w3 w$ ^, P' I
iiii)用户通过del_a_timer来删除某个定时器,通 过destroy_mul_timer来删除整个多定时器。
0 s& R. J2 [; C9 P
' f' E+ h7 S1 E; I' b# H- D p# X
7 [* ~2 l1 _2 g- ]$ R
5 j" ?0 c4 P2 ?/ s+ k1 b
作者:
yin123
时间:
2021-3-30 17:59
linux下多定时器+线程池的实现
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2