Just to add, for accurate timing, you are gonna want to preserve any leftover time on the counter each time it gets reset. Why? Because your ticks will never land exactly on the triggered time.
For example, you have a timer that a weapon can shoot exactly every 1000 ms (1 second).
During any particular game thread tick your timer will probably at like 1020 milliseconds when the weapon can shoot.
At this point the timer needs to reset to 20 milliseconds and not 0 milliseconds.