最近做一個(gè)紅包提現(xiàn)活動(dòng),每次點(diǎn)擊提現(xiàn)按鈕后本地記錄提現(xiàn)時(shí)間,等60s后才能再次進(jìn)行提現(xiàn)。本地測試時(shí)很正常,但是有個(gè)同事卻出現(xiàn)了倒計(jì)時(shí)時(shí)間很大的問題。排查業(yè)務(wù)邏輯未找到問題,懷疑是C++部分獲取時(shí)間部分溢出導(dǎo)致,一看源碼果斷如此。
為正鑲白等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及正鑲白網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、正鑲白網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!unsigned int C2dxEx::getTickCount()
{
cocos2d::cc_timeval tvpre;
cocos2d::CCTime::gettimeofdayCocos2d(&tvpre, NULL);
return tvpre.tv_usec / 1000 + tvpre.tv_sec * 1000;
}
int在32和64位機(jī)器上都是32位的,unsigned int 的取值范圍為 0~42949672595,換算成天數(shù)為
Days = 42949672595/1000/60/60/24 = 49.7103 ,因此差不多每49天就會(huì)溢出一次。解決辦法很簡單,只需要將返回值修改為double或者long long即可。
關(guān)于C語言int、long等的取值范圍詳細(xì)可參考 CYJ_fightman 的博客 :
https://blog.csdn.net/cyj2014go/article/details/78080279
PS:
以上是在公司的現(xiàn)有工程上看到的源碼,版本為cocos2dx 2.2,文件為 C2dxEx。后來又到cocos2dx 3.10版本中查找未發(fā)現(xiàn)gettickcount,反而在ccutils.h中找到了一個(gè)獲取時(shí)間的實(shí)現(xiàn),如下:
double gettime()
{
struct timeval tv;
gettimeofday(&tv, nullptr);
return (double)tv.tv_sec + (double)tv.tv_usec/1000000;
}
#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
#include "platform/CCStdC.h"
#ifndef __MINGW32__
NS_CC_BEGIN
int gettimeofday(struct timeval * val, struct timezone *)
{
if (val)
{
LARGE_INTEGER liTime, liFreq;
QueryPerformanceFrequency( &liFreq );
QueryPerformanceCounter( &liTime );
val->tv_sec = (long)( liTime.QuadPart / liFreq.QuadPart );
val->tv_usec = (long)( liTime.QuadPart * 1000000.0 / liFreq.QuadPart - val->tv_sec * 1000000.0 );
}
return 0;
}
NS_CC_END
#endif // __MINGW32__
#endif // CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
由于項(xiàng)目使用的是cocos-lua,并且只是以秒為單位進(jìn)行調(diào)度,因此也可以使用lua的系統(tǒng)函數(shù):os.time(),此函數(shù)返回1970.1.1.08:00和當(dāng)前時(shí)間的秒數(shù)差,如下:
local time2 = os.time() -- 返回1990.01.01 08:00 到當(dāng)前時(shí)間的秒數(shù)
local time = os.time({year =2016, month = 11, day =23, hour =17, min =17, sec = 00})
print("====================time=,",time) -- 結(jié)果打印 1479892620
作者:ONLY-only
來源:CSDN
原文:https://blog.csdn.net/u010130424/article/details/53321069
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
總結(jié):
如果沒有時(shí)間粒度的要求,可以直接使用c函數(shù)的time(NULL)或者lua的os.time()(實(shí)際就是調(diào)用的c函數(shù)的time(NULL))。如果對時(shí)間粒度有要求,則可以使用gettimeofday,前提是讓其返回值至少為64位才行。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前文章:cocos2d-x中g(shù)etTickCount溢出問題-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://vcdvsql.cn/article18/pjjdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、移動(dòng)網(wǎng)站建設(shè)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容