首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >libevent(一)

libevent(一)

作者头像
用户4766018
发布2022-08-19 08:45:49
发布2022-08-19 08:45:49
5870
举报
文章被收录于专栏:格物致知格物致知

Libevent 是一个基于事件通知机制的网络库,用来开发可扩展性的网络服务器。 Libevent提供了一种机制,可以在指定事件发生于某文件描述符或者一个超时事件到达的时候执行一个回调函数。进一步,Libevent也支持信号触发的回调。Libevent用来替换目前的基于事件驱动的网络服务器中的事件循环。应用程序只需要调用event_dispatch(),然后动态增加或移除事件,而不用修改事件循环。目前,Libevent支持/dev/poll, kqueue(2), select(2), poll(2), epoll(4), and evports。

内部事件机制完全独立于暴露的外部接口,因此当Libevent需要更新时,不需要重新设计外部应用程序。因此,Libevent提供了跨平台的开发能力。Libevent支持多线程程序。

Libevent可以在Linux, *BSD, Mac OS X, Solaris and, Windows编译。每个使用Libevent的程序必须包含<event2/event.h>,传递-levent给链接器。 在你调用Libevent的函数前,你需要安装这个库。如果你要在多线程程序中使用Libevent,你需要初始化多线程支持--调用evthread_use_pthreads() or evthread_use_windows_threads()。See <event2/thread.h> for more information.你可以替换Libevent的内存管理函数,通过event_set_mem_functions函数,用event_enable_debug_mode()开启debug模式。接下来,你需要创建一个event_base 结构,使用event_base_new() or event_base_new_with_config()。event_base用来管理哪些事件被监测,哪些事件被激活。每个event只能和一个event_base相联系。对于每个你要监视的文件描述符,你必须用event_new创建一个event结构体。你也可以声明一个event结构体然后用event_assign初始化结构体。要使通知生效,你要用event_add把该结构体加入监控列表。

event结构体必须在他活跃状态一直存在,因此一般需要在堆上分配。 最后,你可以使用event_base_dispatch去循环处理事件。你也可以使用event_base_loop() 去做更灵活的控制,比如用非阻塞的方式去调用loop。 另外,一个event_base在同一时间只能被一个线程dispatching。如果你想在多个线程使用events,有2种办法: 1,you can either have a single event_base whose events add work to a work queue 2,你可以给每个线程创建一个event_base对象

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011/10/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档