libevent初体验
2012-03-13 18:49 听雨到天明 阅读(290) 评论(0) 编辑 收藏 举报直接看代码吧,注释写的很详细了
#include<iostream> #include<sys/types.h> #include<event2/event.h> //通用的libevnet消息回调接口,其中fd和event都是注册event的时候提供的标识符 //pArg也是注册事件的时候,告诉libevent的,让它传给自己 void OnTimer(evutil_socket_t fd, short event, void* pArg) { //这里不做任何判断,合乎常规的方法是对fd和event进行下校验 const char* pStrMsg = (const char*)pArg; std::cout << pStrMsg << std::endl; std::cout << "fd is " << (int)fd << std::endl; //event 之所以为1是由于超时 //event 的值一般都是EV_TIMEOUT | EV_READ | EV_WRITE 的组合 std::cout << "event is " << (int)event << std::endl; //libevent不关心消息处理的怎么样 return; } int main(int argc, char* argv[]) { //所有使用libevent的初始化语句 struct event_base* pBase = event_base_new(); if (pBase == NULL) { std::cout << "初始化libevent失败" << std::endl; return 0; } //时间间隔是3秒 struct timeval tv = {3, 0}; //为event事件赋值,这个event事件需要等待定时器对象 //这里有点特殊,为什么fd参数填-1, event填0呢?貌似文档上面没有说明 struct event* pEvent = event_new(pBase, -1, 0, OnTimer, (void*)"this is just a test of livevent!"); if (pEvent == NULL) { std::cout << "建立事件对象失败" << std::endl; return 0; } //添加事件到libevent中,第二个参数其实是这个事件的等待超时时间,当前是等待3秒钟而已 //第二个参数为NULL的时候,意味着事件必须无限制的等待 int nRet = event_add(pEvent, &tv); if (nRet == -1) { std::cout << "添加3秒定时器失败" << std::endl; return 0; } //好了,已经添加完成了event之后,就需要进入消息循环等待时间的发生了 int nFlag = 0; if( -1 == (nFlag = event_base_dispatch(pBase))) { //这里非正常终止的原因是 std::cout << "消息循环非正常终止了" << std::endl; } else if(1 == nFlag) { std::cout << "没有事件需要等待了" << std::endl; } //清理资源 event_free(pEvent); event_base_free(pBase); return 1; }