📄 timer.hhf
字号:
#if( ! @defined( timer_hhf ))?timer_hhf := true;namespace linux; @fast;const tvn_bits := 6; tvr_bits := 8; tvn_size := 1 << tvn_bits; tvr_size := 1 << tvr_bits; tvn_mask := tvn_size - 1; tvr_mask := tvr_size - 1; noof_tvecs := 5; type timer_list: record list :list_head; expires :dword; data :dword; function:procedure( p:dword ); @cdecl; base :pointer to tvec_base_t; endrecord; timer_t :timer_list; timer_pt:pointer to timer_t; tvec_t: record index :dword; vec :list_head[ tvn_size ]; endrecord; tvec_root_t: record index :dword; vec :list_head[ tvr_size ]; endrecord; tvec_base_t: record _lock :spinlock_t; timer_jiffies :dword; running_timer :pointer to timer_t; tv1 :tvec_root_t; tv2 :tvec_t; tv3 :tvec_t; tv4 :tvec_t; tv5 :tvec_t; endrecord; static tvec_bases :tvec_base_t; @external; // Actually an array. procedure add_timer( var timer:timer_t ); @cdecl; @external; procedure del_timer( var timer:timer_t ); @use eax; @cdecl; @external; procedure mod_timer( var timer:timer_t; expires:dword ); @use eax; @cdecl; @external; procedure it_real_fn( u:dword ); @cdecl; @external; procedure init_timers; @external; procedure run_local_timers; @external; #macro init_timer( __timer); returns ({ mov( 0, __timer.list.next ); mov( 0, __timer.list.prev ); mov( &tvec_bases, __timer.base ); },"" ) #endmacro; #macro timer_pending( __timer ); returns ({ cmp( __timer.list.next, 0 ); }, "@ne") #endmacro;end linux;#endif //timer_hhf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -