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$ u4 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' Iiiii)用户通过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- ]$ R5 j" ?0 c4 P2 ?/ s+ k1 b

作者: yin123    时间: 2021-3-30 17:59
linux下多定时器+线程池的实现




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2