游戏引擎资源库的资源guid是用什么算法生成的?

#包含" stdafx.h "

# include & lttime.h & gt

# include & ltstdlib.h & gt

# include & ltdos.h & gt

# include & ltWindows.h & gt

# include & ltiostream & gt

# include & ltvector & gt

# include & lt地图& gt

typedef unsigned _ _ int 64 u _ int 64 _ t;

typedef无符号int u _ int 32 _ t;

const u _ int 64 _ t c _ mark _ time _ stamp = 0x ffffffff 0000000;/*时间戳掩码*/

const u _ int 64 _ t c _ mark _ district = 0x 00000000 fff 00000;/*服务器区号掩码*/

const u _ int 64 _ t c _ mark _ plat = 0x 0000000000 ff 000;/*服务器中的平台号掩码*/

const u _ int 64 _ t c _ mark _ base = 0x 000000000000 fff;/*本地身份证号码掩码*/

//在所有游戏服务器中生成全局唯一的ID,可以防止ID相同时难以处理的各种问题。

u_int64_t GenNewGUID()

{

static u _ int 32 _ t baseId = 0;

baseid++;

u_int64_t时间戳= (u_int64_t)时间(空);

u _ int 32 _ t district num = 1;/*此服务器区号可根据实际情况设置或获取*/

u _ int 32 _ t platNum = 1;/*该平台号可根据实际情况设置或获取*/

u_int64_t newId =((时间戳& lt& lt32)& amp;c _ mark _ time _ stamp)|((district num & lt;& lt20)& amp;c _ mark _ district)|((platNum & lt;& lt12)& amp;c _ mark _ plat)|(baseId & amp;c _ mark _ base);

返回newId

}

int _tmain(int argc,_TCHAR* argv[])

{

STD::vector & lt;u _ int64 _ t & gtidList

STD::map & lt;u_int64_t,u _ int64 _ t & gtidMap

DWORD dwlastime =::GetTickCount();

DWORD dwCurTime = 0;

u _ int64 _ t uMaxIdOneSec = 4096//此算法支持在1秒内生成uMaxIdOneSec GUID。如果超过该值,将出现重复值。

u _ int 64 _ t uSecondCnt = 0;//计算它已经运行了多少秒。

u _ int 64 _ t uSecondOver = 2;//生成uSecondOver秒后停止。此时会生成uMaxIdOneSec * uSecondOver GUID。

while(真)

{

dwCurTime =::GetTickCount();

if(dwCurTime-dwlastime & gt;= 1000)

{

dwLastTime = dwCurTime

usecondcnt++;

if(uSecondCnt & gt;= uSecondOver)break;

}

if(id list . size()& lt;uMaxIdOneSec *(uSecondCnt+1))

{

id list . push _ back(GenNewGUID());

}

}

for(STD::vector & lt;u _ int64 _ t & gt*迭代器it = id list . begin();它!= id list . end();it++)

{

id map[* it]= 0;

}

if(id list . size()& gt;idMap.size())

{

//这两个大小不相等,这意味着有重复的id。证明算法失败!请检查uMaxIdOneSec是否为4096!!

MessageBox(NULL,L "具有相同的id!!!",L“标题”,MB _ OK);

}

/**