tcp/udp 추가, todo:iocp openssl 지원하도록 업데이트하기
This commit is contained in:
32
impl/utils/generate_id.cpp
Normal file
32
impl/utils/generate_id.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "utils/snowflake.h"
|
||||
|
||||
#include <thread>
|
||||
|
||||
namespace utils {
|
||||
|
||||
static struct EpochInitializer {
|
||||
EpochInitializer() { EPOCH = std::chrono::system_clock::now(); }
|
||||
std::chrono::system_clock::time_point EPOCH;
|
||||
} epochInitializer;
|
||||
|
||||
Snowflake GenerateID() {
|
||||
static std::mutex snowflakeGenerateMutex_;
|
||||
|
||||
std::lock_guard<std::mutex> lock(snowflakeGenerateMutex_);
|
||||
|
||||
std::size_t tid =
|
||||
std::hash<std::thread::id>{}(std::this_thread::get_id());
|
||||
|
||||
thread_local static int sequence = 0;
|
||||
Snowflake id = {};
|
||||
|
||||
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::system_clock::now() - epochInitializer.EPOCH);
|
||||
id.timestamp = timestamp.count();
|
||||
id.instance = tid;
|
||||
id.sequence = sequence++;
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
}; // namespace Chattr
|
||||
Reference in New Issue
Block a user