1.boost计算uuid的方法
#include <iostream>
#include <string>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
std::string Genuuid()
{
boost::uuids::uuid a_uuid = boost::uuids::random_generator()();
return boost::uuids::to_string(a_uuid);
}
特点:跨平台使用,速度慢,非常低效,不能用在高速环境中,但是安全性好,多线程不会出现重复的uuid。
2.VC自带方法
#include <iostream>
#include <string>
#include <objbase.h>
std::string GetUUID()
{
string strUUID;
GUID guid;
if (!CoCreateGuid(&guid)) {
char buffer[64] = { 0 };
_snprintf_s(buffer, sizeof(buffer),
"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", //大写
//"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", //小写
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2],
guid.Data4[3], guid.Data4[4], guid.Data4[5],
guid.Data4[6], guid.Data4[7]);
strUUID = buffer;
}
return strUUID;
}
特点:Windows环境中使用,速度快,适合于高速环境,基本保证多线程不重复。
3.Linux环境的boost dev
编译时需要boost dev的.o库文件支持,适合在Linux的多线程环境中使用,速度和安全性都很不错。
测试代码:
#include <set>
set<string> set_uuid;
for (int i = 0; i < 100000; i++) {
//string tmp_uuid = Genuuid();
string tmp_uuid = GetUUID();
set_uuid.insert(tmp_uuid);
//cout << "uuid=[" << tmp_uuid << "]." << endl;
}
cout << "setCount=[" << set_uuid.size() << "]." << endl;