工作问题积累(二十一)C++ GetTickCount()

函数的返回类型是DWORD,函数本身功能:返回OS开启在现在所经过的毫秒数(ms).

 

DWORD GetTickCount();

//函数的返回类型是DWORD,函数本身功能:返回OS开启在现在所经过的毫秒数(ms).

 long now = GetTickCount();
    if (m_nTickRoomInfo != 0 && (now - m_nTickRoomInfo >= 60000)) 
	{
        m_nTickRoomInfo = now;
        CCLog("Update ObtainRoomInfo");
        HttpInvoke::ObtainRoomInfo();
    }


用处:(1.)

判断某个方法被调用的时间间隔。

 

 long now = GetTickCount();
 if (m_nTickRoomInfo != 0 && (now - m_nTickRoomInfo >= 60000)){
     m_nTickRoomInfo = now;
     CCLog("Update ObtainRoomInfo");
     HttpInvoke::ObtainRoomInfo();
 }

 

用处:(2.)

随机数的生成。srand(::GetTickCount());

不过这种随机数生成有个问题:往往会产生伪随机,两次执行之间时间间隔非常短,里面会有很多数字重复。

srand(::GetTickCount());
for(int i = 0 ;i < 100 ;++i)
{
      int m_nrand = rand();
}

解决办法:

srand((unsigned int)GetCpuCycle());
int x = rand() % 9 + 1; //获取1-9之间的一个随机数


//获得CPU自上电以来的时间周期数
__declspec (naked) unsigned __int64 GetCpuCycle()
{
 _asm
 {
  rdtsc
  ret
 }
}

上面获得时间周期数的代码是汇编语言所写,可放到所使用文件的最上面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值