游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1596|回复: 1

请教mangos中的一个游戏循环中的频率是怎么得来的?

[复制链接]

18

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2010-12-5 20:19:00 | 显示全部楼层 |阅读模式
#ifdef WIN32
#define WORLD_SLEEP_CONST 50
#else
#define WORLD_SLEEP_CONST 100 //Is this still needed?? [On linux some time ago not working 50ms]
#endif


-------------------------------------------------------------------------------------------
  while (!World::m_stopEvent)
  {
  ++World::m_worldLoopCounter;
  realCurrTime = getMSTime();

  uint32 diff = getMSTimeDiff(realPrevTime,realCurrTime);

  sWorld.Update( diff );
  realPrevTime = realCurrTime;

  // diff (D0) include time of previous sleep (d0) + tick time (t0)
  // we want that next d1 + t1 == WORLD_SLEEP_CONST
  // we can't know next t1 and then can use (t0 + d1) == WORLD_SLEEP_CONST requirement
  // d1 = WORLD_SLEEP_CONST - t0 = WORLD_SLEEP_CONST - (D0 - d0) = WORLD_SLEEP_CONST + d0 - D0
  if (diff <= WORLD_SLEEP_CONST+prevSleepTime)
  {
  prevSleepTime = WORLD_SLEEP_CONST+prevSleepTime-diff;
  ZThread::Thread::sleep(prevSleepTime);
  }
  else
  prevSleepTime = 0;
  }


这是一个游戏服务器mangos的世界更新里的循环段,WORLD_SLEEP_CONST貌似是系统时钟中断频率?

18

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2010-12-5 20:45:00 | 显示全部楼层

Re:请教mangos中的一个游戏循环中的频率是怎么得来的?

#include<stdio.h>
#include<windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
        int i,k,r;
        DWORD t = GetTickCount();
        while(1)
        {
                DWORD t1 = GetTickCount();
                DWORD r = t1-t;
                if(r > 0)
                {
                        printf("%d   %d   %d\n",r, t1, t)        ;
                        t = t1;
                        break;
                }
        }

        getchar();
        return 0;
}


这样对吗? 获得的时差win7系统 大概在15ms
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-30 11:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表