最新实现了一个小巧灵活的日志模块,相关的知识点比较少,主要是存储的管理、线程同步以及可变参数的展开与传递。
首先用模板和单例实现了一个缓存的管理类:
MemCacheTemplateSingleton.h
#include <list>
#include <mutex>
#pragma once
using namespace std;
template <typename T>
class MemCacheTemplateSingleton
{
private:
MemCacheTemplateSingleton()
{
}
~MemCacheTemplateSingleton()
{
for (auto item : m_Items)
{
delete item;
}
m_Items.clear();
}
MemCacheTemplateSingleton(MemCacheTemplateSingleton&) = delete;
MemCacheTemplateSingleton& operator=(MemCacheTemplateSingleton&) = delete;
public:
static MemCacheTemplateSingleton& GetInstance()
{
return m_Instance;
}
void Init(int initNum = 64)
{
for (auto i = 0; i < initNum; i++)
{
m_Items.push_back(new T());
}
}
T* Allocate()
{
lock_guard<mutex> guard(m_Mutex);
if (!m_Items.empty())
{
auto item = m_Items.front();
m_Items.pop_front();
return item;
}
return new T();
}
void Free(T* item)
{
lock_guard<mutex> guard(m_Mutex);
m_Items.push_back(item);
}
private:
static MemCacheTemplateSingleton m_Instance;
std::list<T*> m_Items;
std::mutex m_Mutex;
};
template<class T>
MemCacheTemplateSingleton<T> MemCacheTemplateSingleton<T>::m_Instance;
封装了一个线程的基类,对线程的启停操作做了下封装:
ThreadBase.h
#include <thread>
#include <atomic>
#include <string>
#pragma once
class ThreadBase
{
public:
ThreadBase(const char* name);
virtual ~ThreadBase();
virtual bool Start();
virtual void Stop();
virtual void Join();
protected:
void ThreadFunc();
virtual void ThreadInit();
virtual void Run() = 0;
virtual void ThreadExit();
protected:
unsigned long m_ThreadID;
std::thread m_Thread;
std::string m_ThreadName;
std::atomic<bool> m_ShouldRun;
};
ThreadBase.cpp
#include <functional>
#include "ThreadBase.h"
#include "Logger.h"
#include <Windows.h>
using namespace std;
ThreadBase::ThreadBase(const char* name)
:m_ShouldRun(false)
{
m_ThreadName = name;
}
ThreadBase::~ThreadBase()
{
}
bool Thread