游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3883|回复: 17

问一个代码中 计时器的问题,急

[复制链接]

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2007-9-9 10:37:00 | 显示全部楼层 |阅读模式
具体是这样的,有个情况是6秒触发一次,:
static DOWRD time1 = timeGetTime();
static DOWRD time2 = timeGetTime();
static DWORD R     = 0;
while(true)
{
time2 = timeGetTime();
if(time2 - time1 > 6000)
{
  R = time1%1000;                  //每6秒获得一个小于1000的整数

}
}
=========================================================================
请问下我这样做对吗,不对请指教一下,然后还有没有其他更好的办法呢?

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-9-9 13:23:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

按照你的思想,应该是time2%1000而不是time1。time1是固定值了且循环里没有更新它的值。

如果你要求时间精度不是很高的话,使用WINDOWS的消息定时器,每六秒左右就timeGetTime()%1000。

以上。

6

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2007-9-9 13:57:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

static DOWRD time1 = timeGetTime();
static DOWRD time2 = timeGetTime();
static DWORD R     = 0;
while(true)
{
time2 = timeGetTime();
if((time2 - time1) % 6000 == 0)         //
{
                                        //
}

}

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-9 14:07:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

if里还需要重新设置time1,不然一次大于6秒后,time2 - time1永远大于6000了。

另外while(true) 放这里,你的意思是? 一直执行 ? 程序其它部分sleep6秒?

一般的做法是,程序里只有一个地方计算流逝时间,然后传给其他所有需要的函数,在相应的函数里你累加流逝时间,然后判断是否大于某值。

6

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2007-9-9 14:07:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

临界情况 time1 == time2 应该不属于每6秒处理的范围

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-9 14:13:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

time2 = timeGetTime();
if( (time2 - time1) > 6000 )         //
{
     time1 = timeGetTime();
}

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2007-9-9 14:37:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

static DOWRD time1 = timeGetTime();
static DOWRD time2 = timeGetTime();
static DWORD R     = 0;

time2 = timeGetTime();
if(time2 - time1 > 6000)
{
  R = time1%1000;                  //每6秒获得一个小于1000的整数
  time1 = time2                    

}
然后继续loop;
意思就是不断的计算time2 和 time1 的差值, 当为6秒触发一次

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-9 14:46:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

和游戏无关?还是用在多线程里?

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2007-9-9 14:54:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

就是要指定函数中的某段代码片断 6秒执行一次 没用多线程
好比如说 void fun ()
{
    //代码A//
    //其他代码//
}
在整个程序中,fun()是在不断调用的,但是代码A是指定每6秒调用一次这样,所以需要计算个时间间隔

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-9 14:58:00 | 显示全部楼层

Re:问一个代码中 计时器的问题,急

那你一直在这里loop,其它的代码根本就没执行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 22:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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