网站开发毕业设计评审表wordpress 优秀作者

web/2025/9/30 20:00:11/文章来源:
网站开发毕业设计评审表,wordpress 优秀作者,wordpress自媒体插件,许昌做网站联系电话一.定时器#xff08;timer#xff09;的需求 1.执行定时任务的时#xff0c;主线程不阻塞#xff0c;所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用#xff0c;一个timer需要能够管理多个定时任务#xff0c;所以timer要支持增删任务…一.定时器timer的需求 1.执行定时任务的时主线程不阻塞所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用一个timer需要能够管理多个定时任务所以timer要支持增删任务通过容器储存任务 3.当timer空闲时即没有任务或执行任务的时刻未到timer中的线程不应该空转来占用资源可通过条件变量实现 4.支持重复任务和非重复任务 二.定时器timer的实现 #include algorithm #include atomic #include chrono #include condition_variable #include functional #include map #include mutex #include thread #include iostream #include iomanip #include sstreamnamespace CC { using TaskFunc std::functionvoid();struct Task {uint64_t id;uint64_t period;bool repeated;TaskFunc func;bool removed;Task(uint64_t id, uint64_t period, bool repeated, TaskFunc func): id(id), period(period), repeated(repeated), func(func), removed(false){} };class Timer { public:Timer() : m_stop(false){m_worker std::thread(Timer::run, this);}~Timer(){m_stop.store(true);m_condition.notify_all();m_worker.join();}uint64_t add(uint64_t period_ms, bool repeated, TaskFunc func){uint64_t when now() period_ms;Task task(m_cur_id, period_ms, repeated, func);{std::lock_guardstd::mutex lock(m_tasks_mutex);m_tasks.insert({when, task});}m_condition.notify_all();return m_cur_id;}// Timer::remove并没有真正的将定时任务删除仅仅是将removed标志位设置为true删除操作实际是在Timer::run中进行的。// 为什么要这么做如果在这里如果由Timer::remove来执行m_tasks.erase(it)那么有可能删除的是Timer::run里正在执行的那个任务这是明显不对的。// 所以才采用将removed标志位设置为true的这种做法。bool remove(uint64_t id){bool flag false;std::lock_guardstd::mutex lock(m_tasks_mutex);std::multimapuint64_t, Task::iterator it std::find_if(m_tasks.begin(), m_tasks.end(),[id](const std::pairuint64_t, Task item) - bool { return item.second.id id; });if (it ! m_tasks.end()){it-second.removed true;flag true;}return flag;}private:std::thread m_worker;std::atomicbool m_stop;std::multimapuint64_t, Task m_tasks;std::mutex m_tasks_mutex;std::condition_variable m_condition;uint64_t m_cur_id;// m_condition.wait之后继续向下执行此时如果m_stop是true那么表明timer要被停止了那线程也要结束所以一个break跳出最开始的while (true)循环让线程执行结束。// 如果m_stop是false那表明现有可能有定时任务需要执行了。取出第一个任务m_tasks.begin()也是按时间排序最靠前的任务。用任务的时刻和当前时刻对比// 如果“时辰已到”那就执行。执行的之后需要注意的是要将锁释放lock.unlock()因为继续持有没有任何意义反而会阻塞住对m_tasks的一些操作。// 如果“时辰未到”那就执行m_condition.wait_for让当前线程休眠直到std::chrono::milliseconds(task_time - cur_time)这段时间过去或者被唤醒。void run(){while (true){std::unique_lockstd::mutex lock(m_tasks_mutex);m_condition.wait(lock, [this]() - bool { return !m_tasks.empty() || m_stop; });if (m_stop){break;}uint64_t cur_time now();std::multimapuint64_t, Task::iterator it m_tasks.begin();uint64_t task_time it-first;if (cur_time task_time){Task cur_task it-second;if (!cur_task.removed){lock.unlock();cur_task.func();lock.lock();if (cur_task.repeated !cur_task.removed){uint64_t when cur_time cur_task.period;Task new_task(cur_task.id, cur_task.period, cur_task.repeated, cur_task.func);m_tasks.insert({when, new_task});}}m_tasks.erase(it);}else{m_condition.wait_for(lock, std::chrono::milliseconds(task_time - cur_time));}}}uint64_t now() //ms{auto now std::chrono::system_clock::now();auto duration now.time_since_epoch();return std::chrono::duration_caststd::chrono::milliseconds(duration).count();} };} // namespace CC// 格式化时间精确到毫秒. std::string getTimeString() {auto now std::chrono::system_clock::now();auto duration now.time_since_epoch();auto millis std::chrono::duration_caststd::chrono::milliseconds(duration).count();std::time_t time std::chrono::system_clock::to_time_t(now);std::tm *tm std::localtime(time);std::stringstream ss;ss std::put_time(tm, %Y-%m-%d %H:%M:%S) . std::setw(3) std::setfill(0) millis % 1000;return ss.str(); }// 待执行的任务 void theTask(int id) {std::cout getTimeString() id id std::endl; }int main() {CC::Timer *timer new CC::Timer();timer-add(3000, false, std::bind(theTask, 1));uint64_t id timer-add(2000, true, std::bind(theTask, 2));timer-add(1000, true, std::bind(theTask, 3));std::this_thread::sleep_for(std::chrono::seconds(3));timer-remove(id);std::this_thread::sleep_for(std::chrono::seconds(1));delete timer;std::this_thread::sleep_for(std::chrono::seconds(1));return 0; } 参考链接https://zhuanlan.zhihu.com/p/668916073

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在asp网站甘肃城乡建设厅网站首页

学习感悟一己之言 学习上克服困难实际上是克服心理上或认识上的障碍的过程。所谓的理解,就是化陌生为熟悉。看不懂,一方面是因为接触的材料太陌生,即远离你当前的背景知识;另一方面是材料或讲述者的描述刻画不准确或晦涩不当。有了…

设计公司网站详情wordpress同步到豆瓣

1、Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 集群是一个统称,他分为好几种,如:高性能科学群集、负载均衡群集、高可用性群集等。 科学群集 、高性能集群(High performance clus…

一般建站需要多少钱天猫购买

PSP个人项目耗时对比记录表:四则运算 Personal Software Process StagesTime(%)Planning7 Estimate9开发76 •需求分析 6 •生成设计文档 7 •设计复审(和同事审核设计文档) 6 •代码规范(为目前的开发制定合适的规范&…

迁安网站开发个人网站 创意

MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。在创建表时设置唯一约束在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法规则如下: UNIQUE创建数据表 t…

连云港网站推广优化广州公司注册处官网

这篇文章解释了当iPhone上的Wi-Fi变灰时,你应该检查并修复的所有事情。 确保飞行模式关闭 这听起来可能很傻,但在执行任何其他操作之前,请确保未打开飞机模式。此功能禁用Wi-Fi(和蜂窝网络),因为它旨在允许你在通常不允许传出无线通信的飞机上使用手机。 查看飞行模式…

贵州网站推广电话dede网站模板怎么安装

1996年6月23日至7月1日,我被点名到四川某单位协助排查某系统的技术问题。 我不懂该系统的原理,也不懂硬件,只能从软件角度分析问题。 那时,我所在单位已经为一家美国公司做了3年的软件第三方独立验证和测试,从中学到…

无锡找做网站wordpress文章编辑器插件

先说句题外话,个人认为,基本上所有的高级语言被设计出来的最终目的是降低软件开发难度,提升软件开发人员素质和团队协作能力,降低软件维护的难度。在学习语言的时候,可以从这么方面来推测各种语言语法设计的原因&#…

成都微信网站建设报价单网站域名可以自己做吗

warning.js:7 Warning: [antdv: Table] Each record in dataSource of table should have a unique key

书法网站建站目标哪些网站是做数据分析的

我将Dropzonejs很好地集成到了我的前端(VueJS)中。如何在Dropzone上手动触发上传文件事件我有验收测试Dropzone使用Webdriver/Codeception的问题。底线是Webdriver需要一个文件输入,因此它也可以附加文件。任何方式手动触发例如悬浮窗内上传?我可以在页面…

国外创意摄影网站品牌网站开发策划书

以下内容转自http://ifeve.com/starvation-and-fairness/: 如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性”–即…

网站的后台在哪儿西安网络推广网站优化

俚语加密是一种古老而有效的通信方式,将特定词语或短语在群体内赋予特殊含义,从而隐藏真实信息。类似于方言,它在历史上的应用不可忽视。随着计算机时代的到来,现代密码学通过数学运算编织密语,使得加密变得更加高深莫…

珠海移动网站建设公司排名pagespeed WordPress

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器,将文件看作流来读取数据。如下面的例子所示: StreamExe…

深圳仿站定制模板建站建设网站的基本工作流程

思路: 1、定义一个空列表来存储所有的奇数 2、判断是奇数就追加到列表的末尾 3、打印所有的奇数 代码如下: list [ ] #定义一个列表来存储所有的奇数 for i in range (1,100):if i % 2 ! 0: #判断是否为奇数list.append(i) #追加到列表的末尾 prin…

个人博客网站设计的目的用wordpress修改现有网页

游戏AI:大模型在游戏内容生成与交互体验优化中的应用 1. 背景介绍 随着人工智能技术的不断发展,游戏AI已经从简单的决策树和有限状态机,发展到了基于机器学习和深度学习的复杂系统。大模型,如GPT-3等,在游戏内容生成…

博客网站设计及说明单位网站建设的请示

Zeng Q, Chen B, Zhang S, et al. Full-scale ab initio simulations of laser-driven atomistic dynamics[J]. npj Computational Materials, 2023, 9(1): 213.核心研究内容: 本文研究了激光驱动的原子动力学的全尺度从头算模拟。研究的重点是探讨在极端条件下材料…

网站技术的解决方案网站 蓝色

**单片机设计介绍, 基于单片机体温心率检测仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机体温心率检测仪系统设计是一个综合性的项目,旨在通过单片机及其外围电路实现对人体体温和心…

网站建设模块需求分析wordpress游客登录可见

Java中synchronized的使用实例synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法,若有则要等正在使用synchronized方法的线…

微信的微网站模板论坛网站模板免费下载

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

济南 制作网站 公司Linux主机设置网站首页

本文主要阐述HDFSRPC安全认证相关的实现。主要介绍Token相关的实现。 写在前面 相关blog https://blog.csdn.net/hncscwc/article/details/124722784 https://blog.csdn.net/hncscwc/article/details/124958357 Token由来 在探究完Kerberos,我一直在想一个问题…

淘宝网站建设的策划书做阀门网站电话

一、虚拟地址转换成物理地址 涉及到的部件: MMU:虚拟地址—MMU—>物理地址。MMU会控制整个流程(查快表、查慢表等等)TLB快表:组号(若为组相联TLB)、TLB标记、有效位、页框号页表&#xff08…