游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1679|回复: 3

Timer时钟管理器如何做??

[复制链接]

44

主题

156

帖子

162

积分

注册会员

Rank: 2

积分
162
发表于 2004-12-27 17:22:00 | 显示全部楼层 |阅读模式
我想写一个游戏的时钟管理,就是通过每10微妙处理一次。
初步想用timeGetTime,但看到很多人用QueryPerformanceCounter这个函数。
因为windows系统自己的wm_time是55微妙一次循环,而且还是不准确的,所以需要自己写一个可以10微妙自动循环的消息函数。
怒小弟水平有限,只是知道原理,,没见到一句这样的代码。
如何自己做这个循环,在winmain()或者WndProc()中怎么加入这样的循环不是很清楚。
希望各位大虾帮助!!

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2004-12-28 00:40:00 | 显示全部楼层

Re:Timer时钟管理器如何做??

若无特殊要求,用DXUtil_Timer这个函数就可以了

44

主题

156

帖子

162

积分

注册会员

Rank: 2

积分
162
 楼主| 发表于 2004-12-31 10:05:00 | 显示全部楼层

Re:Timer时钟管理器如何做??

谢谢楼上,目前基本解决了这个问题。
不敢藏私,把我的解决方案公布。

我用的是汇编提取CPU运行次数的方法:

inline unsigned __int64 GetCycleCount(void)
{
        _asm   _emit 0x0F
        _asm   _emit 0x31
}
然后再写一个计算每微妙的频率:
void CGameTimer::InitTimer()                        //初始化时间
{
        __int64 freqTemp;
        freqTemp = freq;
        for(int i = 0;i<8;i++)
        {       
                start = GetCycleCount();
                Sleep(100);
                end = GetCycleCount();
                freq = (end-start)/100+freq;
        }
        if(freqTemp != 0)
        {
                freq = (freq/8+freqTemp)/2;
        }else
        {
                freq = freq/8;
        }       
}

这样能得到机器的大概精准时间。
然后就可以通过它来处理时间了!
时间循环作在Rend()里面,游戏每秒钟绘制40次以上,这样就不需要再开新线程来出来时间了。

不知道这样的解决方式是否可行!!

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
发表于 2004-12-31 15:57:00 | 显示全部楼层

Re:Timer时钟管理器如何做??

是毫秒吧?
微秒?太夸张了吧?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 22:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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