; ============================================================================= ; Модуль : Timer ; Назначение : Периодический вызов fn_on_tick сервисов ; Файл : core/timer.inc ; ============================================================================= align 4 vbox_timer_handle dd 0 TIMER_DELAY_START equ 10 ; 100ms до первого вызова TIMER_INTERVAL equ 10 ; 100ms между вызовами ; timer_init — Запуск таймера proc timer_init DEBUGF 2, "[VBoxGuest] [Timer] Initializing...\n" mov eax, [vbox_timer_handle] test eax, eax jnz .ok invoke TimerHS, TIMER_DELAY_START, TIMER_INTERVAL, timer_cb, 0 test eax, eax jz .err mov [vbox_timer_handle], eax DEBUGF 2, "[VBoxGuest] [Timer] Started, handle=0x%x, interval=%dms\n", \ eax, TIMER_INTERVAL * 10 .ok: xor eax, eax ret .err: DEBUGF 2, "[VBoxGuest] [Timer] ERROR: Failed to start\n" mov eax, VERR_INTERNAL_ERROR ret endp ; timer_stop — Остановка таймера proc timer_stop mov eax, [vbox_timer_handle] test eax, eax jz .done invoke CancelTimerHS, eax mov dword [vbox_timer_handle], 0 DEBUGF 2, "[VBoxGuest] [Timer] Stopped\n" .done: ret endp ; Callback таймера — вызывает fn_on_tick у всех включенных сервисов proc timer_cb stdcall, userdata:dword stdcall dispatcher_tick_all ret endp