embedded-framework/utils/Log/src/ILog.cpp
2023-07-20 08:18:17 -07:00

32 lines
1.0 KiB
C++

#include "ILog.h"
#include <thread>
std::shared_ptr<ILog> &ILog::GetInstance(std::shared_ptr<ILog> *impl)
{
static std::shared_ptr<ILog> instance = std::make_shared<ILog>();
static bool instanceChanging = false;
if (impl && false == instanceChanging)
{
// Don't use std::mutex for runing faster.
// Sleep for difference thread to release instance.
instanceChanging = true;
//std::this_thread::sleep_for(std::chrono::milliseconds(100));
if (instance.use_count() == 1) // bug?
{
instance->Log("Instance change succeed.\n");
instance->UnInit();
(*impl)->Init();
instance = *impl;
}
else
{
instance->Log("[ error ] instance change failed, using by some one.\n");
}
instanceChanging = false;
}
if (instanceChanging)
{
static std::shared_ptr<ILog> tmporaryInstance = std::make_shared<ILog>();
return tmporaryInstance;
}
return instance;
}