返回

Socket Server怎么连接客服端?SocketTool怎么用/如何建立Socket服务端/客户端

时间:2016年12月22日 01:57评论:0
第 4 页 连接池的实现
四、连接池的实现
每个连接池保存一个链表保存已经建立的连接:list<MyConnection *> * m_connections

当然这个链表也需要锁来进行多线程保护:pthread_mutex_t m_connectionMutex;

此处一个MyConnection也是一个MyTask,由一个线程来负责。

线程池也作为连接池的成员变量:MyThreadPool * m_threadPool

连接池由类MyConnectionPool负责,其主要函数如下:

void MyConnectionPool::addConnection(MyConnection * pConn)
{

pthread_mutex_lock(&m_connectionMutex);

m_connections->push_back(pConn);

pthread_mutex_unlock(&m_connectionMutex);

m_threadPool->addTask(pConn);
}
 

MyConnectionPool也要启动一个背后的线程,来管理这些连接,移除结束的连接和错误的连接。

void MyConnectionPool::managePool()
{

pthread_mutex_lock(&m_connectionMutex);

for (list<MyConnection *>::iterator itr = m_connections->begin(); itr!=m_connections->end(); )
{
MyConnection *conn = *itr;
if (conn->isFinish())
{
delete conn;
conn = NULL;
list<MyConnection *>::iterator pos = itr++;
m_connections->erase(pos);
}
else if (conn->isError())
{

//处理错误的连接
++itr;
}
else
{
++itr;
}
}

pthread_mutex_unlock(&m_connectionMutex);

}
 

本文导航

上一页 1 2 3 4 5 6 下一页
相关文章
猜你喜欢
用户评论