return new QtDNTimeKeeperImpl;
}
-QtDNTimeKeeperImpl::QtDNTimeKeeperImpl() : mIntervalTime(1000),mAvgActualInterval(1000),mAdjustTime(0),mPrevTime(0),mStartTime(0),mTickTime(0)
+QtDNTimeKeeperImpl::QtDNTimeKeeperImpl() : mIntervalTime(1000),mAdjustTime(0),mPrevTime(0),mStartTime(0),mTickTime(0)
{
}
bool QtDNTimeKeeperImpl::setIntevalSec(float time)
{
mIntervalTime = time * 1000;
- mAvgActualInterval = time * 1000;
mAdjustTime = 0.0;
return true;
}
}
qint64 currentTime = QDateTime::currentMSecsSinceEpoch();
qint64 dt = currentTime - mPrevTime;
- qint64 wt = mIntervalTime + dt + (int)mAdjustTime;
-
- if (wt < 5) // wait at least 5ms.
+ qint64 wt = mIntervalTime - dt + (int)mAdjustTime;
+ if (wt < 1) // wait at least 1ms.
{
- wt = 5;
+ wt = 1;
}
SleeperThread::msleep(wt);
qint64 t = QDateTime::currentMSecsSinceEpoch();
- mAvgActualInterval = (float)mAvgActualInterval * 0.9 + ((float)(t - mPrevTime) * 0.1);
- mAdjustTime += (mIntervalTime - mAvgActualInterval);
+
+ mAdjustTime += mIntervalTime - (t - mPrevTime);
+ if (mAdjustTime < -mIntervalTime * 0.3)
+ {
+ mAdjustTime = -mIntervalTime * 0.3;
+ }
mPrevTime = t;
mTickTime = (mPrevTime - mStartTime)/1000.0;
{
mStartTime = QDateTime::currentMSecsSinceEpoch();
mPrevTime = mStartTime;
- mAvgActualInterval = mIntervalTime;
mAdjustTime = 0.0;
mTickTime = 0.0;
return true;