千家信息网

如何理解libevent的事件循环

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,如何理解libevent的事件循环,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。#include #include "e
千家信息网最后更新 2025年11月10日如何理解libevent的事件循环

如何理解libevent的事件循环,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

#include #include "event2/event.h"#include void stdin_callback(evutil_socket_t fd,short what,void *arg){    static int i = 0;    char buf[1024];    struct event* base = (struct event_base *)arg;    printf("stdin_callback start\n");    int ret  = read(fd,buf,sizeof(buf));    buf[ret] = '\0';    printf("buf %s\n",buf);    printf("stdin_callback end\n");    if(++i >=1)    {        //event_base_loopbreak(base);                //event_base_loopexit(base,NULL);                struct timeval timeout = {5,0};        event_base_loopexit(base,&timeout); //5秒之后退出    }}int main(){    struct event_base *base = event_base_new();    struct event *ev0 = event_new(base,STDIN_FILENO,0,NULL.NULL);    event_assign(ev0,base,STDIN_FILENO,EV_READ|EV_PERSIST,stdin_callback,base);    event_add(ev0,NULL);             struct event *ev1 = event_new(base,STDIN_FILENO,0,NULL.NULL);    event_assign(ev1,base,STDIN_FILENO,EV_READ|EV_PERSIST,stdin_callback,base);    event_add(ev1,NULL);    /*event loop*/    event_base_loop(base,0);//效果等同于 event_base_dispatch(base);        //event_base_loop(base,EVLOOP_ONCE);        //event_base_loop(base,EVLOOP_NONBLOCK);        if(event_base_got_break(base))        puts("event base loop break");    else if(event_base_got_exit(base))        puts("event base loop exit");        event_base_free(base);    event_free(ev0);    event_free(ev1);    return 0;}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0