1 、evthread_use_pthreads();
int CTcpServer::Start()
{
if(m_bStartFlag)
{
printf("repeat start");
return -2;
}
if (NULL == m_pEventBase)
{
evthread_use_pthreads(); // 1
m_pEventBase = event_base_new(); /* 初始化event_base */
if(NULL == m_pEventBase)
{
printf("m_pEventBase is NULL");
return -1;
}
evthread_make_base_notifiable(m_pEventBase); //2
}
3、void CTcpServer::accept_conn_cb(struct evconnlistener *listener,evutil_socket_t fd, struct sockaddr *address, int socklen)
{
struct event_base *base = evconnlistener_get_base(listener);
if(NULL == base)
{
printf("base is NULL");
return ;
}
struct bufferevent *bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE); //3
//bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE);
中 加上 BEV_OPT_THREADSAFE