X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FItimer.c;h=1d63adf47f62b3f302d704ce99f7552a15392c80;hb=432ec49f1fbaefc54f03bc3378f63fbd1e75d44b;hp=623839189fb4b3fcd6cf9711a1b6d4433785cb9c;hpb=70bf5e07c7b8679b5bb267d79049dbfc28be7930;p=ghc-hetmet.git diff --git a/ghc/rts/Itimer.c b/ghc/rts/Itimer.c index 6238391..1d63adf 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.23 2001/08/14 13:40:09 sewardj Exp $ * * (c) The GHC Team, 1995-1999 * @@ -18,9 +18,8 @@ * to support. So much for standards. */ -#if !defined(_AIX) -# define NON_POSIX_SOURCE -#endif +/* This is not posix compliant. */ +/* #include "PosixSource.h" */ #include "Rts.h" #include "RtsFlags.h" @@ -49,16 +48,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 +79,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 +107,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 +131,6 @@ initialize_virtual_timer(nat ms) timeKillEvent(vtalrm_id); timeEndPeriod(1); } -# endif return 0; } @@ -257,6 +244,6 @@ getourtimeofday(void) unsigned int getourtimeofday(void) { - return (unsigned int)GetTickCount() * 1000; + return ((unsigned int)GetTickCount() * TICK_FREQUENCY) / 1000; } #endif