chyper2 2016-08-02 03:30 采纳率: 0%
浏览 2429

libevent多线程处理新手问题

小弟最近在做个项目
服务端:
主线程用event_base_dispatch(g_eventBase);阻塞掉
子线程负责从数据库中读数据发送bufferevent_write()
初始化如下
[code=c]

struct sockaddr_in sSvrAddr;

memset(&sSvrAddr, 0, sizeof (sSvrAddr));
try
{
    sSvrAddr.sin_family = AF_INET;
    sSvrAddr.sin_addr.s_addr = inet_addr(g_strListenIP.c_str());
    sSvrAddr.sin_port = htons(atoi(g_strListenPort.c_str()));
}
catch (...)
{
    LOGERROR(g_Log, ERROR_CODE_UNDEFINED, "系统启动失败!请检查IP/PORT是否设置正确! IP:%s PORT:%s",
             g_strListenIP.c_str(),g_strListenPort.c_str());
    exit(0);
}

// 新建Base事件
g_eventBase = event_base_new();    

evconnlistener *listener = 
        evconnlistener_new_bind(g_eventBase, listener_cb, g_eventBase,
                                  LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE|LEV_OPT_THREADSAFE,
                                  5, (struct sockaddr*) &sSvrAddr,
                                  sizeof (struct sockaddr_in));
evthread_use_pthreads();
event_base_dispatch(g_eventBase);

[/code]

listener_cb函数如下
[code=c]
struct sockaddr_in sCliAddr;
memcpy(&sCliAddr, sock, sizeof(sCliAddr));

//evutil_make_socket_nonblocking(iCliFd);
struct bufferevent* buf_ev;
buf_ev = bufferevent_socket_new(g_eventBase, iCliFd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE);
bufferevent_setcb(buf_ev, readcb, NULL, errorcb, NULL);
bufferevent_enable(buf_ev, EV_READ | EV_WRITE);

[/code]

现在出现的问题是
过一段时间(不确定)就会出现所有的消息都无法触发任何callback函数,接收(进不了readcb函数)和发送消息(bufferevent_write返回成功加入,但是没有真正发出)也没有反应,但是调试跟踪代码时,发现还是在dispatch的循环中!请问是什么情况!

最新更新进展!我将bufferevent_write更新为write函数后,跑了几个小时了!目前没问题!应该是因为我只有一个线程涉及到了libevent,但是为什么啊!求教原因!

  • 写回答

1条回答 默认 最新

  • 鱼弦 全栈领域优质创作者 2016-08-02 03:42
    关注

    dispatch 消息没法分发出去

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题