百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

用C++实现一个定时任务框架(c++ 定时任务)

ccwgpt 2024-09-29 09:54 42 浏览 0 评论

最近项目上线,需要对系统的健康状况进行巡检,并将巡检报告输出到Excel表格中,本来打算用Java来做,但是……Java开发人员一来事情太多,每天都在不停的开发新的功能和生产新的Bug;二来面对C++开发应用不断被Java挤压的实际情况,也不得不给仅有的C++开发人员找点事情做,于是乎就决定使用C++来写定时任务。

先说下定时任务的重要性,定时任务允许开发人员在指定的时间间隔内重复、自动地执行某项任务,在数据处理、自动化以及准实时系统中占据着优势地位。极大的减少了生产系统中重复性的工作,一个功能完善的定时任务调度框架,通常由以下几个部分构成:

  • 任务调度器:负责任务的管理和执行
  • 任务统一接口:使用定时任务框架必须遵守的协议,这样也方便管理
  • 定时器:就是高效的管理时间计划,准确的触发任务执行。

在说完上面的内容之后,下面再来看下怎么去实现一个定时任务调度框架。

1、任务统一接口

由一个纯虚类组成,每个任务可以继承该类,包含两个纯虚函数,分别是任务执行和任务状态判断。

class Task {
public:
    virtual void execute() = 0;
    virtual bool isReady() const = 0;
};

2、任务调度器

用来管理一组任务,任务到达指定的运行时间后就自动执行定时任务。这里用vector实现,也可以用队列进行管理。

class TaskScheduler {
private:
    std::vector<std::unique_ptr<Task>> tasks;
public:
    void addTask(std::unique_ptr<Task> task) {
        tasks.push_back(std::move(task));
    }
    void runTasks() {
        for (auto& task : tasks) {
            if (task->isReady()) {
                task->execute();
            }
        }
    }
};

3、定时器

定时器就是对时间进行管理,以便每个任务都能准确的执行,这个模块不拘泥形式,可以单独的类实现,也可以在主函数中实现。

#include <chrono>
#include <thread>


void runScheduler(TaskScheduler& scheduler) {
    while (true) {
        scheduler.runTasks();
        std::this_thread::sleep_for(std::chrono::seconds(1)); // 根据需要调整间隔
    }
}

一个好的定时任务框架,除了能够承担正常的生产需求外,还需要具备以下三个特点:

  • 可扩展性:能后灵活增加定时任务并进行管理
  • 灵活性:满足各种生产需求
  • 可靠性:让每个任务都能准确执行,并反馈任务执行状态

使用C++构建的定时任务框架,开发人员可以简化任务管理、提升应用效率并将关键流程进行自动化。无论是开发运维工具还是复杂系统,都可以对该框架进行扩展,从而满足生产各种需求。

相关推荐

如何高效实现API接口的自动化测试?

实现API接口的自动化测试是一个多步骤的过程,涉及需求分析、测试用例设计、环境搭建、脚本编写、执行测试、结果分析和持续集成等多个环节。选择合适的工具和框架也是成功的关键。嘿,咱来聊聊实现API接口自动...

总结100+前端优质库,让你成为前端百事通

1年多时间,陆陆续续整理了一些常用且实用的开源项目,方便大家更高效地学习和工作.js相关库js常用工具类「lodash」一个一致性、模块化、高性能的JavaScript实用工具库。「xij...

混合开发到底怎么个混法?(混合开发rn)

引言最近几年混合开发越来越火,从PhoneGap到Cordova到Ionic,再到ReactNative,到Flutter。同时在搜索引擎中诸如IonicVSReactNativeRN和Weex+...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言之前看了雪碧大佬的将React渲染到嵌入式液晶屏觉得很有意思,R...

【直接收藏】前端 VUE 高阶面试题(一)

说说vue动态权限绑定渲染列表(权限列表渲染)首先请求服务器,获取当前用户的权限数据,比如请求this.$http.get("rights/list");获取到权限数据之后,在列表中...

Vue采用虚拟DOM的目的是什么?(vue2 虚拟dom)

虚拟DOM更新其实效率并不像大家想象中的那么高,而且React官方也从来没说过虚拟DOM效率有多高,相反React虚拟DOM的实现也不是所有虚拟DOM产品中最好的。但是通过虚拟D...

什么是 JavaScript?(什么是党的旗帜)

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师然冬JavaScript(JS)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。(MDN...

Weex在内涵发现页中的工程实践(weex唯客交易所官网)

React-Native和Weex是目前最为火热的两个客户端跨平台解决方案。从去年2016年9月份开始,IES在抖音产品中应用了ReactNative,中途遇到了很多的问题,尤其是长列表的性能问题一...

新恒汇:公司主要业务包括智能卡业务、蚀刻引线框架业务以及物联网eSIM芯片封测业务

证券日报网讯新恒汇7月3日在互动平台回答投资者提问时表示,公司主要业务包括智能卡业务、蚀刻引线框架业务以及物联网eSIM芯片封测业务。具体请关注公司公告和公开披露信息。(编辑王雪儿)...

“移”科普——什么是物联网?(移动设备物联网物联网应用实例)

物联网(InternetofThings,简称IoT)是指通过互联网将物理世界与数字世界相连接,实现物与物之间的智能互联的网络。它是一种新型的信息通信技术,通过传感器、嵌入式系统、网络技术等手段,...

如何自己搭建一个物联网平台?(自建物联网云平台)

自己搭建一个物联网(IoT)平台需要涉及多个关键步骤,包括硬件设备的选择、软件开发、网络通信、安全性设计以及数据管理。以下是搭建物联网平台的基本流程:1.确定物联网平台架构一个完整的物联网平台通常包...

物联网数据接入篇-应用层 Modbus(5)

前四篇文章讲述的是TCP/IP模型中的网络接口层、网络层、传输层、应用层一,这里到了第四层应用层二。由于协议比较多,就分开篇来介绍。这篇讲Modbus协议,后面再讲MQTT协议、CoAP协议、...

乐鑫ESP32-C5全面量产:行业首款双频Wi-Fi 6的RISC-V SoC

IT之家5月2日消息,乐鑫信息科技4月30日宣布,ESP32-C5现已全面进入量产。ESP32-C5宣称是行业首款2.4&5GHz双频Wi-Fi6的RISC-...

Vue Shop Admin:强大而易用的后台管理系统模板

VueShopAdmin是一个基于Vue.js框架的后台管理系统模板。它具有简洁、易用和美观的特点,非常适合开发人员用于快速构建各种类型的管理系统。这个模板使用了最新的技术,如Vue3、V...

基于Prometheus的自动化巡检(prometheus自动发现详解)

!!大家好,我是乔克,一个爱折腾的运维工程,一个睡觉都被自己丑醒的云原生爱好者。作者:乔克公众号:运维开发故事道路千万条,安全第一条。操作不规范,运维两行泪。前言目前,大部分公司都采用Promet...

取消回复欢迎 发表评论: