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

延庆宜昌网站建设去哪找wordpress主题

延庆宜昌网站建设,去哪找wordpress主题,asp故障解答网站模板,网站内容建设评估老早之前就听说时间轮算法特别高效#xff0c;Linux内核都用的它#xff0c;这两天抽空实现了遍……嗯#xff0c;被差一bug搞死(~#xffe3;▽#xffe3;~) 啊哈 网上扣来的图#xff0c;原理好懂#xff1a;轮子里的每格代表一小段时间#xff08;精度#xff09;…老早之前就听说时间轮算法特别高效Linux内核都用的它这两天抽空实现了遍……嗯被差一bug搞死(~▽~) 啊哈 网上扣来的图原理好懂轮子里的每格代表一小段时间精度连起来就能表示时间点了我去年买了个表格子内含链表中存回调函数时间指针每次转动一格指向某格时取出链表里的回调函数依次执行后清空链表等待下一次转动。 加入节点逻辑也简单在轮子可表示的时间范围内格子数*格子精度配合当前时针位置对格子总数取余即得本节点需放哪个格子。 进一步为扩大时间轮的表示范围使用分级方式跟时分秒一样上一级转一圈下一级动一格。   对吧很容易理解……然后coding是另一码事(╯‵□′)╯︵┴─┴ 首先最重要的数据结构用了环形链表方便增删。 struct NodeLink {NodeLink* prev;NodeLink* next;NodeLink() { prev next this; } //circle }; struct stWheel {NodeLink* slots; //每个slot维护的node链表为一个环slot-next为node链表中第一个节点prev为node的最后一个节点const uint32 size;uint32 slotIdx;stWheel(uint32 n) : size(n), slotIdx(0){ slots new NodeLink[size]; }~stWheel() {if (slots) {for (uint32 j 0; j size; j) {NodeLink* link (slots j)-next;while (link ! slots j) {TimerNode* node (TimerNode*)link;link node-link.next;delete node;}}delete[]slots;}} }; 具体时间节点的数据结构如下 struct TimerNode {Pool_Obj_Define(TimerNode, 32) //内存池声明不含数据NodeLink link; //must in the headuint32 timeDead;uint32 interval; //间隔多久int loop; //总共循环多久std::functionvoid() func; }; TimeNode里保存上下关系stWheel的NodeLink辅助用的环状链表的头没实际数据用以记录首尾TimeNode。 核心代码如下 ——增删节点—— void CTimerMgr::_AddTimerNode(uint32 milseconds, TimerNode* node) {NodeLink* slot NULL;uint32 tickCnt milseconds / TIME_TICK_LEN;if (tickCnt WHEEL_CAP[0]) {uint32 index (_wheels[0]-slotIdx tickCnt) (WHEEL_SIZE[0] - 1); //2的N次幂位操作取余slot _wheels[0]-slots index;} else {for (int i 1; i WHEEL_NUM; i) {if (tickCnt WHEEL_CAP[i]) {uint32 preCap WHEEL_CAP[i - 1]; //上一级总容量即为本级的一格容量uint32 index (_wheels[i]-slotIdx tickCnt / preCap - 1) (WHEEL_SIZE[i] - 1); //勿忘-1slot _wheels[i]-slots index;break;}}}NodeLink* link (node-link);link-prev slot-prev; //插入格子的prev位置(尾节点)link-prev-next link;link-next slot;slot-prev link; } void CTimerMgr::RemoveTimer(TimerNode* node) {LOG_TRACK(node[%p], timeDead[%lld], node, node-timeDead);NodeLink* link (node-link);if (link-prev) {link-prev-next link-next;}if (link-next) {link-next-prev link-prev;}link-prev link-next NULL;delete node; } ——轮子启动—— void CTimerMgr::CheckTimerList(const uint32 timenow) {uint32 tickCnt timenow _checkTime ? (timenow - _checkTime) / TIME_TICK_LEN : 0;//if (tickCnt) Printf();for (uint32 i 0; i tickCnt; i) { //扫过的slot均超时stWheel* wheel _wheels[0];NodeLink* slot wheel-slots wheel-slotIdx;NodeLink* link slot-next;slot-next slot-prev slot; //清空当前格子while (link ! slot) { //环形链表遍历TimerNode* node (TimerNode*)link;link node-link.next; //得放在前面后续函数调用可能会更改node的链接关系AddToReadyNode(node);}if ((wheel-slotIdx) wheel-size) {wheel-slotIdx 0;Cascade(1, timenow); //跳级}_checkTime TIME_TICK_LEN;}DoTimeOutCallBack(); } uint32 CTimerMgr::Cascade(uint32 wheelIdx, const uint32 timenow) {if (wheelIdx 1 || wheelIdx WHEEL_NUM) {return 0;}int casCnt 0;stWheel* wheel _wheels[wheelIdx];NodeLink* slot wheel-slots wheel-slotIdx;NodeLink* link slot-next;slot-next slot-prev slot; //清空当前格子while (link ! slot) {TimerNode* node (TimerNode*)link;link node-link.next;if (node-timeDead timenow) {AddToReadyNode(node);} else {_AddTimerNode(node-timeDead - timenow, node); //本级精度下已超时精度提升重新加一遍casCnt;LOG_TRACK(wheelIdx[%u], link[%p], milseconds[%u], wheelIdx, link, node-timeDead - timenow);}}if ((wheel-slotIdx) wheel-size) {wheel-slotIdx 0;casCnt Cascade(wheelIdx, timenow);}return casCnt; }   那么问题来了大于大于等于边界减一……搞错几多次 ○(*︶*)○ 吃饱睡好     源码地址https://github.com/3workman/Tools/tree/master/src/Timer转载于:https://www.cnblogs.com/3workman/p/6063819.html
http://www.zqtcl.cn/news/60805/

相关文章:

  • 银川网站建设公司名单杭州网站制作外包
  • 植物网站模板网站建设需要知道什么软件
  • 大家称赞的网站建设浙江省国有建设用地出让网站
  • 搭建网站的流程公司网站建设知识
  • 网站如果建设廊坊seo排名霸屏
  • 网站的网站制作网站 多语言
  • 网站建设名字新媒体网站建设
  • 物流网站制作怎么做ppt模板免费下载 素材学生版
  • 电子商务网站运营流程做网页推广的网站
  • 好网站推理南阳网站公司
  • php网站开发用什么php网站模板尺寸
  • 柳市网站建设哪家好wordpress 嵌入播放ppt
  • 重庆市工程建设交易中心网站云网站开发
  • 网站界面设计的主要内容手机微信网站开发教程
  • 受欢迎的赣州网站建设sharepoint 网站开发
  • 手机网站模板 织梦wordpress 文章完整导出文章及文章中的图片
  • vps 一个ip 多个网站 软件 linux深圳市建设网站
  • 网站尺寸规范wordpress标题换行
  • 东莞百度seo地址网络优化软件哪个好
  • 近三天新闻50字左右株洲优化公司
  • 如何做外卖网站app阿里云wordpress发邮件
  • 深圳的网站建设公司流程sem技术培训
  • 做仪表行业推广有哪些网站网站建设中销售人员会问客户的问题
  • 怎么可以建网站洋县建设银行网站
  • 北京网站建设有限公司购买域名搭建网站
  • 龙采网站建设案例百度在线提问
  • 黄浦网站设计中国国家住房和城乡建设部网站首页
  • 企业门户网站功能宁津诚信建设网站
  • 汽车网站源码常州网站设计湛江公司电话
  • 网站着陆率购物网站后台管理系统模板