网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月14日漏签0天
easyx吧 关注:10,939贴子:46,989
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 12回复贴,共1页
<<返回easyx吧
>0< 加载中...

新人求问…… 有啥计时的函数么?

  • 只看楼主
  • 收藏

  • 回复
  • 斯普林特老师
  • 二年级
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
RT,希望让敌人每0.3秒动一次,用变量记录的话,万一赶上一个快的机器就没法玩了…… 所以求问一下~ 谢谢~


  • fammy043
  • 初二年级
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
方式五:与GetTickCount()函数类似的多媒体定时器函数DWORD timeGetTime(void),该函数定时精 度为ms级,返回从Windows启动开始经过的毫秒数。微软公司在其多媒体Windows中提供了精确定时器的底 层API持,利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一 个事件、函数或过程的调用。不同之处在于调用DWORD timeGetTime(void) 函数之前必须将 Winmm.lib 和 Mmsystem.h 添加到工程中,否则在编译时提示DWORD timeGetTime(void)函数未定义。由于使用该 函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。


2025-08-14 04:23:46
广告
不感兴趣
开通SVIP免广告
  • fammy043
  • 初二年级
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
方式七:对于精确度要求更高的定时操作,则应该使用QueryPerformanceFrequency()和 QueryPerformanceCounter()函数。这两个函数是VC提供的仅供Windows 95及其后续版本使用的精确时间函数,并要求计算机从硬件上支持精确定时器。
QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型如下:
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);
数据类型ARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定。该类型的定义如下:
typedef union _LARGE_INTEGER
{
struct
{
DWORD LowPart ;// 4字节整型数
LONG HighPart;// 4字节整型数
};
LONGLONG QuadPart ;// 8字节整型数
}LARGE_INTEGER ;
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率, 然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经 历的精确时间。下列代码实现1ms的精确定时:
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;// 获得初始值
do
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;//获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒
}while(dfTim<0.001);


  • fammy043
  • 初二年级
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
500毫秒使用函数
clock_t clock();
就可以了
clock_t t1 = clock(), t2;
while(true)
{
t2 = clock();
if ( t2 - t1 > 500 )
//..do something..
}


  • yangw80
  • 初三年级
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2 楼做法有些麻烦,加一条 Sleep(1) 就好了:
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
dwEnd = GetTickCount() - dwStart;
Sleep(1);
}while(dwEnd <50);


  • yangw80
  • 初三年级
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复楼主:
如果你刚开始学不久,对于延时 0.3s 这样的功能,直接加一个 Sleep(3000); 就好了。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回easyx吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示