对于常见的线程池代码进行优化,可以设置固定的常用线程数,减小线程频繁的创建和销毁,并且适配C++代码,测试可用。
1. 先创建一个控制线程挂起和启动的时间类EventCondition,通过条件变量来控制.
//创建声明文件EventCondtion.h
#pragma once
#include <mutex>
#include <condition_variable>
class EventCondition
{
public:
EventCondition();
~EventCondition();
virtual void set();
virtual void setAll();
virtual void wait();
virtual void reset();
virtual void waitFor(int seconds);
private:
std::mutex m_mutex;
std::condition_variable m_condVar;
bool m_bTriggered;
bool m_bTriggerAll;
};
//创建实现文件EventCondtion.cpp
#include "EventCondtion.h"
EventCondtion::EventCondtion()
: m_bTriggered(false), m_bTriggerAll(false)
{
}
EventCondtion::~EventCondtion()
{
}
void EventCondtion::set()
{
std::unique_lock<std::mutex> lck(m_mutex);
m_bTriggered = true;
m_condVar.notify_one();
}
void EventCondtion::setAll()
{
std::unique_lock<std::mutex> lck(m_mutex);
m_bTriggered = true;
m_condVar.notify_all();
m_bTriggerAll = true;
}
void EventCondtion::wait()
{
std::unique_lock<std::mutex> lck(m_mutex);
while (!m_bTriggered)
{
m_condVar.wait(lck);
}
if (!m_bTriggerAll)
{
m_bTriggered = false;
}
}
void EventCondtion::reset()
{
std::unique_lock<std::mutex> lck(m_mutex);
m_bTriggered = false;
m_bTriggerAll = false;
}
void EventCondtion::waitFor(int seconds)
{
std::unique_lock<std::mutex> lck(m_mutex);
while (!m_bTriggered)
{
m_condVar.wait_for(lck, std::chrono::seconds(seconds));
}
}