libevent默认使用单线程接收发送数据。
例如,
bufferevent_setcb(bev, conn_readcb, conn_writecb, conn_eventcb, NULL);
server端接收数据的响应函数conn_readcb被调用时,调用bufferevent_write发送消息,客户端就能收到消息。
如果在另一个线程中直接调用bufferevent_write发送消息,消息没有发送出去,conn_writecb响应函数也没有被调用
解决:
1、cmake文件中添加“-levent_pthreads”选项,否则会报错:
“evthread_use_pthreads 未定义的引用”
添加头文件:
#include <event2/thread.h>
2、
在event_base_new调用之前添加代码:
#ifdef WIN32
evthread_use_windows_threads();//win上设置
#else
evthread_use_pthreads();//unix上设置
#endif
3、添加添加“BEV_OPT_THREADSAFE”选项
bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE);