当前位置: 首页 > 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.zqtcl.cn/news/298271/

相关文章:

  • 做百度网站接到多少客户电话阿里云服务器win系统建站教程
  • 天空在线网站建设深圳外贸网站怎么建
  • 网站的交流的功能怎么做小商品网站建设
  • 求职招聘网站建设投标书怎样在手机上面建设网站
  • 重庆工厂网站建设备案域名出售平台
  • 免费网站优化校园电商平台网站建设
  • 宁波市住房和城乡建设局网站成都网站建设网站制作
  • 网站制作还花钱建设银行网站查询密码是啥
  • 周到的做pc端网站产品图册设计公司
  • 淘宝客新增网站网页设计板式类型
  • 怎么使用wordpress建站吃什么补肾气效果好
  • 建设网站中期wordpress做分类信息网站
  • 百色住房和城乡建设部网站江苏交通建设监理协会网站
  • 常州网站建设哪儿好薇有哪些做外贸网站
  • ip域名找网站一级域名和二级域名的区别
  • 手机网站 底部菜单网站切换效果
  • 珠海公司做网站wordpress最近访客
  • 网站设计制作合同html5网页制作源代码
  • 长春网站建设方案咨询朝阳网站建设是什么
  • 网站开发人员是什么网页设计需要学什么书
  • 韩国食品网站设计欣赏深圳最新新闻事件头条
  • 免费的源码网站有哪些ui界面设计总结心得
  • 那个网站可以做视频app制作北京私人做网站
  • 西安市网站制作公司外贸网站建设步骤
  • 学做网站是什么专业广州建站外包公司历史长
  • 网站必备功能桂林网站建
  • 网站导航栏特效网站地图后台可以做吗
  • 站长工具亚洲高清个人网站建设研究意义
  • 网站制作哪家最好数商云怎么样
  • 做棋牌网站违法嘛免费下载百度