当前位置: 首页 > news >正文

net网站开发微信支付自己做网站运营

net网站开发微信支付,自己做网站运营,深圳网站设计兴田德润信任高,百度小程序平台在开发Linux网络程序时#xff0c;通常需要维护多个定时器#xff0c;如维护客户端心跳时间、检查多个数据包的超时重传等。如果采用Linux的SIGALARM信号实现#xff0c;则会带来较大的系统开销#xff0c;且不便于管理。 本文在应用层实现了一个基于时间堆的高性能定时器通常需要维护多个定时器如维护客户端心跳时间、检查多个数据包的超时重传等。如果采用Linux的SIGALARM信号实现则会带来较大的系统开销且不便于管理。 本文在应用层实现了一个基于时间堆的高性能定时器同时考虑到定时的粒度问题由于通过alarm系统调用设置的SIGALARM信号只能以秒为单位触发因此需要采用其它手段实现更细粒度的定时操作当然这里不考虑使用多线程sleep的实现方法理由性能太低。 通常的做法还有采用基于升序的时间链表但升序时间链表的插入操作效率较低需要遍历链表。因此本实现方案使用最小堆来维护多个定时器插入O(logn)、删除O(1)、查找O(1)的效率较高。 首先是每个定时器的定义 class heap_timer { public:     heap_timer( int ms_delay )     {         gettimeofday( expire, NULL );         expire.tv_usec ms_delay * 1000;         if ( expire.tv_usec 1000000 )         {             expire.tv_sec expire.tv_usec / 1000000;             expire.tv_usec % 1000000;         }     } public:     struct timeval expire;     void (*cb_func)( client_data* );     client_data* user_data;     ~heap_timer()     {         delete user_data;     } }; 包括一个超时时间expire、超时回调函数cb_func以及一个user_data变量user_data用于存储与定时器相关的用户数据用户数据可以根据不同的应用场合进行修改这里实现的是一个智能博物馆的网关网关接收来自zigbee协调器的用户数据并为每个用户维护一段等待时间T在T到来之前同一个用户的所有数据都存放到user_data的target_list中当T到来时根据target_list列表选择一个适当的target并发送到ip_address同时删除定时器有点扯远了。。总之要实现的功能就是给每个用户维护一个定时器定时值到来时做一些操作。 class client_data { public:     client_data(char *address):target_count(0)     {         strcpy(ip_address,address);     } private:     char ip_address[32];     target target_list[64];     int target_count;     ...... }; 以下是时间堆的类定义包括了一些基本的堆操作插入、删除、扩容还包括了定时器溢出时的操作函数tick() class time_heap { public:     time_heap( int cap  1) throw ( std::exception )         : capacity( cap ), cur_size( 0 )     {         array new heap_timer* [capacity];         if ( ! array )         {             throw std::exception();         }         for( int i 0; i capacity; i )         {             array[i] NULL;         }     } ~time_heap()     {         for ( int i   0; i cur_size; i )         {             delete array[i];         }         delete [] array;     } public:     int get_cursize()     {         return cur_size;     } void add_timer( heap_timer* timer ) throw ( std::exception )     {         if( !timer )         {             return;         }         if( cur_size capacity )         {             resize();         }         int hole cur_size;         int parent 0;         for( ; hole 0; holeparent )         {             parent (hole-1)/2;             if ( timercmp( (array[parent]-expire), (timer-expire), ) )             {                 break;             }             array[hole] array[parent];         }         array[hole] timer;     }     void del_timer( heap_timer* timer )     {         if( !timer )         {             return;         }         // lazy delelte         timer-cb_func NULL;     }     int top(struct timeval time_top) const     {         if ( empty() )         {             return 0;         }         time_top array[0]-expire;         return 1;     }     void pop_timer()     {         if( empty() )         {             return;         }         if( array[0] )         {             delete array[0];             array[0] array[--cur_size];             percolate_down( 0 );         }     }     void tick()     {         heap_timer* tmp array[0];         struct timeval cur;         gettimeofday( cur, NULL );         while( !empty() )         {             if( !tmp )             {                 break;             }             if( timercmp( cur, (tmp-expire), ) )             {                 break;             }             if( array[0]-cb_func )             {                 array[0]-cb_func( array[0]-user_data );             }             pop_timer();             tmp array[0];         }     }     bool empty() const     {         return cur_size 0;     }     heap_timer** get_heap_array()     {         return array;     } private:     void percolate_down( int hole )     {         heap_timer* temp array[hole];         int child 0;         for ( ; ((hole*21) (cur_size-1)); holechild )         {             child hole*21;             if ( (child (cur_size-1)) timercmp( (array[child1]-expire), (array[child]-expire), ) )             {                 child;             }             if ( timercmp( (array[child]-expire), (temp-expire), ) )             {                 array[hole] array[child];             }             else             {                 break;             }         }         array[hole] temp;     }     void resize() throw ( std::exception )     {         heap_timer** temp new heap_timer* [2*capacity];         for( int i 0; i 2*capacity; i )         {             temp[i] NULL;         }         if ( ! temp )         {             throw std::exception();         }         capacity 2*capacity;         for ( int i 0; i cur_size; i )         {             temp[i] array[i];         }         delete [] array;         array temp;     } private:     heap_timer** array;     int capacity;     int cur_size; };
http://www.pierceye.com/news/298271/

相关文章:

  • 联合实验室 网站建设方案网站 手机兼容
  • 保定网站建设培训班团员团干部如何登录到系统
  • 做网站的旅行社手机页面网站模板怎么卖
  • 潮州南桥市场中国建设银行网站企业为什么要建设网站
  • 东营seo整站优化禁止wordpress历史版本
  • 太原网站建设与维护秦皇岛建设局
  • 我的世界做壁纸的网站学生班级优化大师
  • 高端大气上档次网站网站建立基本流程
  • 找人做网站如何担保江门网站建设
  • 张家界住房和城乡建设局网站各大网站提交入口网址
  • 张家港建网站Wordpress主页不要全部显示
  • 竞猜网站模板经典创意营销案例
  • 网站如何盈利流量费wordpress主题转html
  • html5做视频网站电脑制作h5最常用软件
  • 做印刷的网站有哪些百度网盟推广价格
  • 杭州网站seo优化国企央企都玩劳务外包
  • 杭州seo网站推广排名上市公司的信息网站
  • 做互联网网站的会抓西安小程序专业开发公司
  • 安徽省建设厅八大员报名网站网页设计兼职平台
  • 网站建设专利个人备案网站可以做商城展示
  • 北京做网站好的公司南充建设企业网站
  • 做一个静态网站要多少钱龙岗区网站建设
  • 安徽网站建设开发电话万网 网站模板
  • 网站响应式设计域名注册服务商
  • 焦作公司做网站小程序开发教程视频 推荐
  • php网站做代理服务器室内设计公司招聘
  • 做招标投标网站如何张家口专业做网站公司
  • 做网站广告中敏感词会涉及到工商彩票网站开发. 极云
  • 怎么做网站数据库东莞本地招聘网站有哪些
  • 网站维护中是不是关闭网站了无货源电商软件