• 由于简单测试,就实现一个最简单的定时器功能
  • 头文件:
#pragma once
#include <iostream>
#include <string>
#include <time.h>
#include <vector>
typedef void(*CALLBACKFUNC)(void*);class TimeClock {public:TimeClock();~TimeClock();bool setTimeWork(std::wstring work_name, int timeInterval, CALLBACKFUNC func, void * args,int counts = 0, bool is_Run = false); //设置定时任务bool startWork(std::wstring work_name); //启动任务bool stopWork(std::wstring work_name);
private:std::vector<std::wstring> m_vec_workname;              //任务名集合
};
  • 实现代码
using namespace std;TimeClock::TimeClock()
{}TimeClock::~TimeClock()
{}//设置计时任务
//@params:work_name: 任务名
//@params:timeInterval:设置时间间隔 即何时开始执行该任务 :默认情况下 是大于10;
//@params:func:回调函数
//@params:args:回调函数的参数
//@param: counts:执行次数:默认为0,即不设置次数
//@param: is_Run: true:立即执行,false:手动运行,默认手动
//@return: true:设置成功,false:设置失败
bool TimeClock::setTimeWork(std::wstring work_name, int timeInterval,CALLBACKFUNC func,void * args, int counts,bool is_Run)
{//先判断大小if (work_name.size()>0){m_vec_workname.push_back(work_name); //添加该工作文件名}else{cout << "任务名有错" << endl;return false;}if (timeInterval < 10){cout << "timeInterval间隔需要大于10" << endl;return false;}if (counts <0){cout << "循环次数不能小于0" << endl;return false;}if (is_Run == true){//提前执行:执行次数为counts次if (counts > 0){//根据counts 设置执行次数clock_t start, finish;start = clock();cout << "Start Time:";cout << start << endl;int count_times = 0;while (1){finish = clock();if ((finish - start) == timeInterval){count_times++;cout << "执行次数"<< count_times << endl;func(args);start = clock();if (count_times == counts){//结束这样break;}}}cout << "执行结束" << endl;}else{}}return true;
}bool TimeClock::startWork(std::wstring work_name)
{return false;
}bool TimeClock::stopWork(std::wstring work_name)
{return false;
}

简单的使用方法:

void backcallfunc(void *arg)
{cout << "go to timer1:" << *(double *)arg << endl;
}int main()
{double mm = 123.33;backcallfunc(&mm);TimeClock * tc = new TimeClock();tc->setTimeWork(L"ddd", 111, backcallfunc,&mm,10,true);delete tc;std::cout << "Hello World!\n";
}
  • 运行截图:

实现这个定时器,主要还是为了了解原理,还是要站在巨人的肩膀上

C++最普通的定时器功能实现相关推荐

  1. Arduino ESP32定时器功能使用

    Arduino ESP32定时器功能使用 ESP32硬件定时器介绍 ESP32 芯片包含两个硬件定时器组.每组有两个通用硬件定时器.它们都是基于 16 位预分频器和 64 位自动重载功能的向上/向下计 ...

  2. python怎样编写定时程序_Python如何实现定时器功能

    Timer: 隔一定时间调用一个函数,如果想实现每隔一段时间就调用一个函数的话,就要在Timer调用的函数中,再次设置Timer.Timer是Thread的一个派生类 python中的线程提供了jav ...

  3. SysTick系统定时器(功能框图和优先级配置)

    SysTick系统定时器(功能框图和优先级配置) SysTick-系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器 ...

  4. STM32F407核心板定时器功能引脚分配

    STM32F407 定时器功能引脚分配

  5. STM32定时器功能概括

    定时器分类 不同的芯片定时器的个数也是不同的,以STM32F103ZE有8个定时器(定时器的具体个数查相关手册). 定时器的分类:高级定时器.通用定时器.基本定时器,这3类定时器的功能各不相同. 定时 ...

  6. 浅谈一下单片机的定时器功能

    MCU相当于一个微控制器,与其他芯片相比,最大的特点是它的可编程特性.由于其可编程功能可以广泛应用于生活的各个方面,如手机.PC周边设备.遥控器.汽车.电子.智能家居等.但这些都是使用具有不同电路的M ...

  7. MM32F3277 MicroPython 的定时器功能

    简 介: 对于SuYong发送过来的带有Timer功能版本的MicroPython进行了测试.在新版的MicroPython中,可以最多定义两个不同频率的定时器中断,完成对于周期时间的控制和输出.这一 ...

  8. 杂乱无序的时间轮:有效实现定时器功能的数据结构

    <实现较低的计时器粒度以重传TCP(RTO):时间轮算法如何减少开销> <分级时间轮优化普通时间轮定时器> <分级时间轮优化普通时间轮定时器(2):滴答式分层计时轮> ...

  9. 利用51系列单片机定时器功能实现测量脉冲宽度

    STC12C系列增强型单片机片上扩展了基本51单片机的功能,如提供了PCA/PWM接口,定时器能工作在1T模式下(基本51单片机的时钟是Fosc的12分频,1T模式下1分频). PCA可以用于脉宽测量 ...

最新文章

  1. mysql system命令_mysql命令
  2. jqgrid 摧毁_非个人的交流将摧毁我们
  3. 放弃相爱,并不放弃彼此
  4. JavaOne 2012:调查JVM水晶球
  5. 简单代码生成器原理剖析(一)
  6. linux rsync删文件速度,为什么用rsync删除大量文件的时候比用rm快
  7. React开发(275):dva debugger对应的值
  8. java final定义_Java中final关键字的用法
  9. 数据科学入门与实战:Seaborn002热力图等
  10. MYSQL Innodb逻辑存储结构
  11. 【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)
  12. c语言读一字节程序,C语言读写二进制文件
  13. 教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
  14. 大数据查询与处理Pig培训:大数据查询处理技术解析
  15. 网易有道词典识别不了adobe打开的pdf
  16. Windows系统下安装VMware Workstation并创建Xubuntu虚拟环境
  17. ACM-ICPC 2016 沈阳赛区现场赛 I. The Elder HDU 5956(斜率DP)
  18. pcntl php windows_PHP各版本安装pcntl扩展
  19. 区块链——智能合约入门知识
  20. Pikachu靶场:XSS盲打

热门文章

  1. java 线程池数量_java线程池及创建多少线程合适
  2. 【月报】Java知音的二月汇总
  3. VCL组件之主要方法(Methods)和通用事件(Events)
  4. springboot 插入返回id_Spring Boot实现分布式微服务开发实战系列(七)
  5. SpringMVC-数据处理(三)
  6. MNIST机器学习入门(二)
  7. Unity中的单例方法
  8. MongoDB初试备份及恢复
  9. 每日站立例会01,02,03
  10. Therenbsp;isnbsp;nonbsp;resul…