#! perl -slw use strict; use threads; use threads::shared; my $alarmFlag : shared = 0; $SIG{__WARN__} = sub{ $alarmFlag = 1; }; sub myAlarm { my( $procID, $timeout ) = @_; async sub{ Win32::Sleep $timeout; warn 'Timeout'; }; } myAlarm( $$, 3000 ); while( not $alarmFlag ) { print 'Waiting for the alarm at ', scalar localtime; print 'Tum te, tum te, tum'; Win32::Sleep 1000; } print 'The alarm was raised', $/; $alarmFlag = 0; myAlarm( $$, 3000 ); while( not $alarmFlag ) { print 'Waiting for the alarm at ', scalar localtime; print 'Tum te, tum te, tum'; Win32::Sleep 1000; } print 'The alarm was raised', $/; __END__ P:\test>alarm Waiting for the alarm at Mon Dec 8 20:03:19 2003 Tum te, tum te, tum Waiting for the alarm at Mon Dec 8 20:03:20 2003 Tum te, tum te, tum Waiting for the alarm at Mon Dec 8 20:03:21 2003 Tum te, tum te, tum The alarm was raised Waiting for the alarm at Mon Dec 8 20:03:22 2003 Tum te, tum te, tum Waiting for the alarm at Mon Dec 8 20:03:23 2003 Tum te, tum te, tum Waiting for the alarm at Mon Dec 8 20:03:24 2003 Tum te, tum te, tum The alarm was raised