X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FItimer.c;h=5b10a5bbbc3f34cb1c65ad5f6196fa3e3214adf0;hb=6b6f88da9bfde8f26531ba595a0e47be72db5bb0;hp=623839189fb4b3fcd6cf9711a1b6d4433785cb9c;hpb=70bf5e07c7b8679b5bb267d79049dbfc28be7930;p=ghc-hetmet.git diff --git a/ghc/rts/Itimer.c b/ghc/rts/Itimer.c index 6238391..5b10a5b 100644 --- a/ghc/rts/Itimer.c +++ b/ghc/rts/Itimer.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Itimer.c,v 1.19 2000/10/06 11:05:57 rrt Exp $ + * $Id: Itimer.c,v 1.22 2001/03/02 10:52:15 simonmar Exp $ * * (c) The GHC Team, 1995-1999 * @@ -49,16 +49,6 @@ lnat total_ticks = 0; /* ticks left before next pre-emptive context switch */ int ticks_to_ctxt_switch = 0; -static -void -#if defined(mingw32_TARGET_OS) || (defined(cygwin32_TARGET_OS) && !defined(HAVE_SETITIMER)) -CALLBACK -handle_tick(UINT uID STG_UNUSED, UINT uMsg STG_UNUSED, DWORD dwUser STG_UNUSED, - DWORD dw1 STG_UNUSED, DWORD d STG_UNUSED); -#else -handle_tick(int unused STG_UNUSED); -#endif - /* ----------------------------------------------------------------------------- Tick handler @@ -90,10 +80,12 @@ handle_tick(int unused STG_UNUSED) */ ticks_since_timestamp++; - ticks_to_ctxt_switch--; - if (ticks_to_ctxt_switch <= 0) { - ticks_to_ctxt_switch = RtsFlags.ConcFlags.ctxtSwitchTicks; - context_switch = 1; /* schedule a context switch */ + if (RtsFlags.ConcFlags.ctxtSwitchTicks > 0) { + ticks_to_ctxt_switch--; + if (ticks_to_ctxt_switch <= 0) { + ticks_to_ctxt_switch = RtsFlags.ConcFlags.ctxtSwitchTicks; + context_switch = 1; /* schedule a context switch */ + } } } @@ -116,14 +108,11 @@ LPTIMECALLBACK vtalrm_cback; nat initialize_virtual_timer(nat ms) { -# ifdef PROFILING /* On Win32 setups that don't have support for setitimer(), we use the MultiMedia API's timer support. - As the delivery of ticks isn't free, we only - enable it if we really needed, i.e., when profiling. - (GetTickCount is used for threadDelay) + The delivery of ticks isn't free; the performance hit should be checked. */ unsigned int delay; static unsigned int vtalrm_id; @@ -143,7 +132,6 @@ initialize_virtual_timer(nat ms) timeKillEvent(vtalrm_id); timeEndPeriod(1); } -# endif return 0; } @@ -257,6 +245,6 @@ getourtimeofday(void) unsigned int getourtimeofday(void) { - return (unsigned int)GetTickCount() * 1000; + return ((unsigned int)GetTickCount() * TICK_FREQUENCY) / 1000; } #endif