c
jiayp004
知之者不如好之者,好之者不如乐之者
展开
-
Libevent分解之数据结构SimpleQueue
#ifndef _TEST_STRUCT_C#define _TEST_STRUCT_C//结构体定义struct Student{ //业务数据 const char name[32]; int id; int classID; //下面的字段纯粹是为了建立链表用 struct TstField { struct Student *sle原创 2013-09-13 17:17:13 · 854 阅读 · 0 评论 -
基于Libevent的流媒体转发程序 性能测试
最近用Libevent库编写了一个简单的流媒体转发程序,以此来测试Libevent在大数据性能方面的表现。服务端读取的是海康DVR视频流,一路大约在200K每秒。下面是记录的性能参数,服务端只是用了普通的PC机。流媒体转发机器配置服务端连接数,有704路并发连接:服务端进程参数:服务端网络情况:从总体来看,Libevent表现相当不错原创 2013-11-08 13:10:35 · 2800 阅读 · 8 评论 -
Libevent中读消息流程
关于接收监听并建立连接得到通讯套接字过程请参考Libevent监听事件的建立过程文档。涉及到的几个结构体 struct bufferevent_private { //主要的结构体 structbufferevent bev; structevbuffer_cb_entry *rea原创 2013-11-04 12:54:03 · 3255 阅读 · 0 评论 -
event结构体中几个变量的作用
struct event{ //ev_next,ev_active_next和ev_signal_next都是双向链表节点指针;它们是libevent对 //不同事件类型和在不同的时期,对事件的管理时使用到的字段。 //libevent使用双向链表保存所有注册的I/O和Signal事件,ev_next就是该I/O事件在//链表中的位置;称此链表为“已注册原创 2013-11-01 13:50:12 · 6350 阅读 · 1 评论 -
Libevent中哈希表详解
Libevent的哈希表数据结构如下图所示::根据fd,通过一个hash算法,在一个数组event_map_entry确定该fd所在的数组位置。因为根据fd的哈希算法,确定的数组位置可能重复,所以在该数组节点处用一个链表存储了不同fd的实际event_map_entry数据。数组节点的指针是指向最后一个插入的event_map_entry结构体。 下面是针对该数据结构L原创 2013-10-29 15:16:11 · 2500 阅读 · 0 评论 -
TailQueue详解
TailQueue详解 本文详细解释Libevent中TailQueue数据结构及使用方法。采用的基础数据结构如下所示:该数据结构包含2个业务字段,设备编号devId和设备名称name。struct AlarmInfo{ //业务数据 int devId; const char name[32]; }如果要采用TailQueue进行改结构体保存,必须原创 2013-10-25 17:26:31 · 7234 阅读 · 1 评论 -
libevent分解之数据结构 小根堆
Libevent使用堆来管理Timer事件,其key值就是事件的超时时间,源代码位于文件min_heap.h中。所有的数据结构书中都有关于堆的详细介绍,向堆中插入、删除元素时间复杂度都是O(lgN),N为堆中元素的个数,而获取最小key值(小根堆)的复杂度为O(1)。堆是一个完全二叉树,基本存储方式是一个数组。源代码地址:http://download.csdn.net/detai原创 2013-09-25 09:01:30 · 1546 阅读 · 0 评论 -
Libevent分解之数据结构 哈希表
event_base中的io变量是类型为event_io_map的结构体,其定义如下:HT_HEAD(event_io_map, event_map_entry);即structname { //哈希表 struct event_map_entry **原创 2013-09-23 12:38:37 · 2158 阅读 · 0 评论 -
Libevent分解之数据结构- 字典表
#ifndef _STUDENT_TEST_C_#define _STUDENT_TEST_C_#include "queue.h"#define ev_uint8_t unsigned char#define ev_int8_t signed charstruct StudentKV{ TAILQ_ENTRY(StudentKV) next;原创 2013-09-16 13:11:43 · 902 阅读 · 1 评论 -
Libevent分解之数据结构Circlequeue
#ifndef _TEST_STRUCT_C#define _TEST_STRUCT_C//结构体定义struct Student{ //业务数据 const char name[32]; int id; int classID; //下面的字段纯粹是为了建立链表用 struct TstField { struct Student *sle原创 2013-09-13 19:03:03 · 1003 阅读 · 1 评论 -
Libevent分解之数据结构List
#ifndef _TEST_STRUCT_C#define _TEST_STRUCT_C//结构体定义struct Student{ //业务数据 const char name[32]; int id; int classID; //下面的字段纯粹是为了建立链表用 struct TstField { struct Student *sle原创 2013-09-13 16:43:54 · 1179 阅读 · 0 评论 -
Libevent分解之数据结构Tailqueue
#ifndef _TEST_STRUCT_C#define _TEST_STRUCT_C//结构体定义struct Student{ //业务数据 const char name[32]; int id; int classID; //下面的字段纯粹是为了建立链表用 struct TstField { struct Student *sle_nex原创 2013-09-13 18:10:53 · 969 阅读 · 1 评论 -
Libevent 分解之数据结构 Singly-linked List
#include #include #include "queue.h"//结构体定义struct Student{ //业务数据 const char name[32]; int id; int classID; //下面的字段纯粹是为了建立链表用 struct TstField { struct Student *sle_next;原创 2013-09-13 15:31:26 · 1155 阅读 · 0 评论 -
函数调用约定不对
calling convention。如果函数在DLL内实现为__stdcall的,而你用_cdecl的方式调用,就会出现错误。所以你可以尝试修改调用约定。在Windows中,WINAPI,CALLBACK等声明都等同于__stdcall__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调转载 2014-05-19 18:31:37 · 674 阅读 · 0 评论