http://www.perlmonks.org?node_id=527007


in reply to alarm() on windows 2003, overview

Looking at the ActiveState sources, it seems 5.8.3 had the first Win32 implementation of alarm(). Here's the changelog comment -

[ 21901] By: nicholas on 2003/12/13 21:22:15 Log: Integrate: ... [ 21895] alarm() is now implemented on Win32. ...

And from looking inside win32.c it seems that win32_alarm() uses SetTimer.

And yes, the behaviour of SetTimer has changed from Win 2000 to Win 2003

On 2000 if the timeout "is greater than USER_TIMER_MAXIMUM, the timeout is set to 1."

On 2003 SP1 if the timeout "is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM."

That might be your problem, maybe.