内存优化
This commit is contained in:
parent
780734e980
commit
0d1fd33446
@ -62,6 +62,39 @@ namespace f8
|
|||||||
work_thread_ = new std::thread(&HttpThread::WorkThreadProc, this);
|
work_thread_ = new std::thread(&HttpThread::WorkThreadProc, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UnInit()
|
||||||
|
{
|
||||||
|
terminated = true;
|
||||||
|
loop_cond_->notify_all();
|
||||||
|
work_thread_->join();
|
||||||
|
delete work_thread_;
|
||||||
|
work_thread_ = nullptr;
|
||||||
|
loop_mutex_->lock();
|
||||||
|
if (!work_node_) {
|
||||||
|
work_node_ = top_node_;
|
||||||
|
top_node_ = nullptr;
|
||||||
|
bot_node_ = nullptr;
|
||||||
|
}
|
||||||
|
while (work_node_) {
|
||||||
|
AsyncHttpNode* pdelnode = work_node_;
|
||||||
|
work_node_ = work_node_->nextnode;
|
||||||
|
if (!work_node_) {
|
||||||
|
work_node_ = top_node_;
|
||||||
|
top_node_ = nullptr;
|
||||||
|
bot_node_ = nullptr;
|
||||||
|
}
|
||||||
|
delete pdelnode;
|
||||||
|
}
|
||||||
|
loop_mutex_->unlock();
|
||||||
|
|
||||||
|
delete loop_cond_;
|
||||||
|
loop_cond_ = nullptr;
|
||||||
|
delete loop_mutex_;
|
||||||
|
loop_mutex_ = nullptr;
|
||||||
|
delete msg_mutex_;
|
||||||
|
msg_mutex_ = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void AddAsyncHttp(AsyncHttpNode* p)
|
void AddAsyncHttp(AsyncHttpNode* p)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lk(*loop_mutex_);
|
std::unique_lock<std::mutex> lk(*loop_mutex_);
|
||||||
@ -81,7 +114,7 @@ namespace f8
|
|||||||
|
|
||||||
void WorkThreadProc()
|
void WorkThreadProc()
|
||||||
{
|
{
|
||||||
while (true) {
|
while (!terminated) {
|
||||||
ProcessMsg();
|
ProcessMsg();
|
||||||
WaitLoopCond();
|
WaitLoopCond();
|
||||||
}
|
}
|
||||||
@ -189,6 +222,7 @@ namespace f8
|
|||||||
int exec_async_http_msgid = 0;
|
int exec_async_http_msgid = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
volatile bool terminated = false;
|
||||||
std::mutex *loop_mutex_ = nullptr;
|
std::mutex *loop_mutex_ = nullptr;
|
||||||
std::condition_variable *loop_cond_ = nullptr;
|
std::condition_variable *loop_cond_ = nullptr;
|
||||||
|
|
||||||
@ -209,6 +243,16 @@ namespace f8
|
|||||||
exec_async_http_msgid = MsgQueue::Instance()->AllocIMMsgId();
|
exec_async_http_msgid = MsgQueue::Instance()->AllocIMMsgId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UnInit()
|
||||||
|
{
|
||||||
|
for (auto& itr : http_thread_pool) {
|
||||||
|
HttpThread* thread = itr;
|
||||||
|
thread->UnInit();
|
||||||
|
delete thread;
|
||||||
|
}
|
||||||
|
http_thread_pool.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void SetThreadNum(int thread_num)
|
void SetThreadNum(int thread_num)
|
||||||
{
|
{
|
||||||
assert(thread_num > 0);
|
assert(thread_num > 0);
|
||||||
@ -334,6 +378,7 @@ namespace f8
|
|||||||
|
|
||||||
void HttpClientPool::UnInit()
|
void HttpClientPool::UnInit()
|
||||||
{
|
{
|
||||||
|
impl_->UnInit();
|
||||||
delete impl_;
|
delete impl_;
|
||||||
impl_ = nullptr;
|
impl_ = nullptr;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,16 @@ namespace f8
|
|||||||
struct NetMsgHandlerObject
|
struct NetMsgHandlerObject
|
||||||
{
|
{
|
||||||
NetMsgHandler* handlers[MAX_MSG_ID] = { nullptr };
|
NetMsgHandler* handlers[MAX_MSG_ID] = { nullptr };
|
||||||
|
|
||||||
|
~NetMsgHandlerObject()
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < MAX_MSG_ID; ++i) {
|
||||||
|
if (handlers[i]) {
|
||||||
|
delete handlers[i];
|
||||||
|
handlers[i] = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename InstanceType, typename MsgType>
|
template<typename InstanceType, typename MsgType>
|
||||||
|
@ -27,7 +27,7 @@ namespace f8
|
|||||||
bool is_poly_log = false;
|
bool is_poly_log = false;
|
||||||
|
|
||||||
std::thread* save_thread = nullptr;
|
std::thread* save_thread = nullptr;
|
||||||
bool save_thread_shutdown = false;
|
volatile bool save_thread_shutdown = false;
|
||||||
|
|
||||||
std::mutex msg_mutex;
|
std::mutex msg_mutex;
|
||||||
TGLogMsgNode* top_node = nullptr;
|
TGLogMsgNode* top_node = nullptr;
|
||||||
@ -44,6 +44,9 @@ namespace f8
|
|||||||
|
|
||||||
virtual ~TGLogImpl()
|
virtual ~TGLogImpl()
|
||||||
{
|
{
|
||||||
|
save_thread_shutdown = true;
|
||||||
|
save_thread->join();
|
||||||
|
delete save_thread;
|
||||||
delete save_cond_mutex;
|
delete save_cond_mutex;
|
||||||
save_cond_mutex = nullptr;
|
save_cond_mutex = nullptr;
|
||||||
delete save_cond;
|
delete save_cond;
|
||||||
|
@ -209,6 +209,7 @@ namespace f8
|
|||||||
google::protobuf::Message* msg = prototype->New();
|
google::protobuf::Message* msg = prototype->New();
|
||||||
JsonToMessage(*p, msg);
|
JsonToMessage(*p, msg);
|
||||||
push_back_func(msg);
|
push_back_func(msg);
|
||||||
|
delete msg;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user