libevent C++面向对象的封装

libevent C++面向对象的封装

作者:方振涛

对event_base操作的封装如下:

class TEventContext
{
public:
	static void InitLib()
	{
		WORD wVersionRequested;
		WSADATA wsaData;
		wVersionRequested = MAKEWORD(2, 2);
		WSAStartup(wVersionRequested, &wsaData);	
	}
	
public:
	TEventContext(event_base* evbase=NULL):m_evBase(evbase){}
	~TEventContext(){
		if (m_evBase)
		{
			event_base_free(m_evBase);
		}
	}
	bool Init()
	{
		if(m_evBase)
			return false;
		m_evBase=event_base_new();
		return m_evBase!=NULL;
	}
	bool ReInit()
	{
		return event_reinit(m_evBase)==0;
	}
	bool Dispatch()//进入事件处理循环
	{
		return event_base_dispatch(m_evBase)==0;
	}
	const char*GetMethod()
	{
		return event_base_get_method(m_evBase);
	}
	int GetFeatures(){return event_base_get_features(m_evBase);}


	enum
	{
		FLoopOnce=EVLOOP_ONCE,
		FLoopNonBlock=EVLO
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
libevent是一个开源的C语言网络库,提供了高效的网络I/O操作和事件驱动编程接口。为了便于使用和扩展,许多C++和其他语言的封装库也被开发出来,下面是一个简单的libevent的C封装示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <event.h> typedef struct { struct event_base *base; struct event *ev; void (*callback)(void *); void *arg; } event_t; event_t *event_create(struct event_base *base, void (*callback)(void *), void *arg) { event_t *ev = (event_t *)malloc(sizeof(event_t)); if (ev == NULL) { return NULL; } memset(ev, 0, sizeof(event_t)); ev->base = base; ev->callback = callback; ev->arg = arg; return ev; } void event_delete(event_t *ev) { if (ev != NULL) { if (ev->ev != NULL) { event_del(ev->ev); event_free(ev->ev); } free(ev); } } void event_read(int fd, short events, void *arg) { event_t *ev = (event_t *)arg; ev->callback(ev->arg); } int event_add(event_t *ev, int fd) { ev->ev = event_new(ev->base, fd, EV_READ | EV_PERSIST, event_read, ev); if (ev->ev == NULL) { return -1; } return event_add(ev->ev, NULL); } void event_loop(struct event_base *base) { event_base_dispatch(base); } int main(int argc, char *argv[]) { struct event_base *base = event_base_new(); if (base == NULL) { perror("event_base_new"); return 1; } event_t *ev = event_create(base, NULL, NULL); if (ev == NULL) { perror("event_create"); return 1; } int fd = STDIN_FILENO; if (event_add(ev, fd) < 0) { perror("event_add"); return 1; } event_loop(base); event_delete(ev); event_base_free(base); return 0; } ``` 该示例中定义了一个event_t类型,用于保存libevent的事件和回调函数。event_create函数用于创建一个新的事件,event_delete函数用于删除事件。event_read函数是一个读事件的回调函数,event_add函数用于添加事件到libevent的事件循环中。event_loop函数用于启动事件循环。在main函数中,首先创建一个event_base对象,然后创建一个event_t对象,并将其添加到事件循环中。最后启动事件循环,并在事件循环结束后删除事件和释放event_base对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值