1 diff -Naur FORTE-0.3.5.orig/src/arch/pc/pctimeha.cpp FORTE-0.3.5/src/arch/pc/pctimeha.cpp
2 --- FORTE-0.3.5.orig/src/arch/pc/pctimeha.cpp 2009-01-13 16:17:18.000000000 +0000
3 +++ FORTE-0.3.5/src/arch/pc/pctimeha.cpp 2009-02-16 10:16:37.000000000 +0000
5 #include "pctimeha.h"
\r
6 #include "../../core/devexec.h"
\r
8 +#include <sys/time.h>
\r
10 const TINT32 CPCTimerHandler::csm_nTicksPerSecond = 1000;
\r
16 +static inline unsigned long long GetTicks(struct timeval* stTmVal, TINT32 ticksPerSecond)
\r
18 + unsigned long long ret = stTmVal->tv_sec * 1000LL;// sec -> ms
\r
19 + ret += stTmVal->tv_usec/1000;// + us -> ms
\r
20 + ret /= 1000/ticksPerSecond; // ms -> ticks
\r
24 bool CPCTimerHandler::run(){
\r
25 struct timespec stReq;
\r
26 + struct timeval stTmNow;
\r
27 + unsigned long long tickStart;
\r
28 + unsigned long long tickNow;
\r
29 + unsigned long long tickCalled = 0;
\r
31 - stReq.tv_nsec = 1000000 / (csm_nTicksPerSecond / 1000);
\r
32 + stReq.tv_nsec = 1000000000 / (csm_nTicksPerSecond);
\r
34 + gettimeofday(&stTmNow, NULL);
\r
35 + tickNow = tickStart = GetTicks(&stTmNow, csm_nTicksPerSecond);
\r
38 - nanosleep(&stReq, NULL);
\r
39 + if( (tickNow-tickStart) <= (tickCalled+1) ) {
\r
40 + nanosleep(&stReq, NULL);
\r
44 + gettimeofday(&stTmNow, NULL);
\r
45 + tickNow = GetTicks(&stTmNow, csm_nTicksPerSecond);
\r