libevent初体验

直接看代码吧,注释写的很详细了

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值