n/m, that's not quite right... CLOCKS_PER_SEC is incorrect...

try this:

#include <sys/times.h>
#include <inttypes.h>
#include <limits.h>
#include <unistd.h>

static uint32_t initial_ticks;
static uint32_t ticks_per_msec;
static uint32_t ticks_per_sec;

static void
TickCountInit (void)
{
        ticks_per_sec = sysconf (_SC_CLK_TCK);
        ticks_per_msec = ticks_per_sec > 1000 ? ticks_per_sec / 1000 : 1;
#if defined (__linux__) /* FIXME: && kernel > 2.6.0 */
        initial_ticks = (UINT_MAX - 300) * ticks_per_sec;
#else
        initial_ticks = 0;
#endif
}

static uint32_t
GetTickCount (void)
{
        struct tms tms;
        clock_t ticks;
        
        if ((ticks = times (&tms)) == (clock_t) -1)
                return 0;
        
        ticks -= initial_ticks;
        
        return (uint32_t) ticks / ticks_per_msec;
}


this gives 1/100th of a second accuracy +/-, so not quite millisecond
accuracy but... eh.

Jeff


On Fri, 2007-07-20 at 00:23 -0400, Jeffrey Stedfast wrote:
> from what I can tell reading the man page... you want to do this:
> 
> guint32 GetTickCount (void)
> {
>       struct tms tms;
>       clock_t ticks;
>       
>       if ((ticks = times (&tms)) == -1)
>               return 0;
>       
> #ifdef LINUX_KERNEL_2_6_0_OR_LATER
>       ticks -= (UINT_MAX - 300) * CLOCKS_PER_SEC;
> #endif
> 
> #define MSEC_PER_SEC 1000
> #define CLOCKS_PER_MSEC (CLOCKS_PER_SEC / MSEC_PER_SEC)
>       
>       return (guint32) (ticks / CLOCKS_PER_MSEC);
> } 
> 
> On Thu, 2007-07-19 at 22:38 -0300, Thiago M. SayĆ£o wrote:
> > Hello!
> > 
> > Enrironment.TickCount is supposed to return the miliseconds since the
> > boot. For my surprise it was returning a negative number which should
> > only happen on the 47th day of uptime.
> > 
> > I did i fix (attached) but it doesn't seem 100% correct and i am not
> > sure if it would work after some days.
> > 
> > Since i'm coding a msn library and msn p2p protocol uses GetTickCount(),
> > it's messing things for me!
> > 
> > Can anyone take a look?
> > 
> > Thanks!
> > 
> > _______________________________________________
> > Mono-list maillist  -  Mono-list@lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-list
> 
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list

_______________________________________________
Mono-list maillist  -  Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to