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

C++ 定时器触发

c++定时器,能够定时触发,即每隔一段固定时间执行一下函数

#include <iostream>
#include <thread>
#include <chrono>
#include <signal.h>
#include <time.h>
#include <cstring>
#include <glog/logging.h>#define EVENTSAVERTIMER_SIG (SIGRTMIN + 14)   // 设置信号
#define EvensTimerPeriod (5) // 5ms// 定时器处理函数
void timerHandler(int sig, siginfo_t *si, void *uc) {LOG(ERROR) << "Timer triggered!" << std::endl;
}void EventSaverTimerInit(void)
{/*配置一个Posix timer*/timer_t TimerPulse;struct sigevent Timer1_Pulse_Sig;struct sigaction Timer1_Pulse_Sa;struct itimerspec Timer1_Pulse_it; // 匹配pulse类型定时器1 的timer设定参数int res;Timer1_Pulse_Sa.sa_flags = SA_SIGINFO | SA_RESTART;Timer1_Pulse_Sa.sa_sigaction = timerHandler;sigemptyset(&Timer1_Pulse_Sa.sa_mask);if (sigaction(EVENTSAVERTIMER_SIG, &Timer1_Pulse_Sa, NULL) == -1){perror("sigaction");}memset(&Timer1_Pulse_Sig, 0, sizeof(Timer1_Pulse_Sig));// 信号量配置Timer1_Pulse_Sig.sigev_value.sival_ptr = &TimerPulse;Timer1_Pulse_Sig.sigev_notify = SIGEV_SIGNAL;Timer1_Pulse_Sig.sigev_signo = EVENTSAVERTIMER_SIG;res = timer_create(CLOCK_REALTIME, &Timer1_Pulse_Sig, &TimerPulse);if (res != 0){perror("TimerPulse create Error");return;}Timer1_Pulse_it.it_value.tv_sec = 0; // 定时器第一次触发的时间, 启动延时时间 5 msTimer1_Pulse_it.it_value.tv_nsec = 5 * 1000 * 1000;Timer1_Pulse_it.it_interval.tv_sec = 0;								  // timer周期Timer1_Pulse_it.it_interval.tv_nsec = EvensTimerPeriod * 1000 * 1000; // 10 ms, 纳秒,微秒,毫秒,秒/*结束配置一个Poisix timer*/res = timer_settime(TimerPulse, 0, &Timer1_Pulse_it, NULL);if (res){perror("TimerPulse settime Error");return;}
}int main() {// startTimer();EventSaverTimerInit();// 主线程继续执行其他操作for (int i = 0; i < 100; ++i) {// std::cout << "Main thread doing work: " << i << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));}// 关闭gloggoogle::ShutdownGoogleLogging();return 0;
}

编译

g++ test.cpp -lrt -lglog

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 苹果电脑可以玩魔兽世界吗 魔兽世界有mac版本么 macbook 可以玩魔兽世界吗
  • Codeforces Round 957 (Div. 3)(A~E题解)
  • Flutter【组件】标签
  • 【数据结构】初探数据结构面纱:栈和队列全面剖析
  • uniapp中使用uni-ui组件库
  • NLP任务中三个概念标记、样本映射和偏移映射三个概念的浅析
  • 【MIT 6.5840/6.824】Lab1 MapReduce
  • 【记录】CSS|Tailwind 的主题定义的颜色的使用方法(--color啥的)
  • 昇思25天学习打卡营第17天|应用实践之SSD目标检测
  • GPT生成文本的实际案例 - Transformer教程
  • 【Cesium开发实战】飞行漫游功能的实现,可设置漫游路径,漫游高度,暂停,继续,删除路径
  • Python爬虫并输出
  • 在若依框架基础上开发新功能
  • 基于YOLOV8的数粒机视觉计数解决方案
  • C# 实现基于exe内嵌HTTPS监听服务、从HTTP升级到HTTPS 后端windows服务
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 11111111
  • CSS盒模型深入
  • docker python 配置
  • Effective Java 笔记(一)
  • Node + FFmpeg 实现Canvas动画导出视频
  • text-decoration与color属性
  • 程序员最讨厌的9句话,你可有补充?
  • 后端_ThinkPHP5
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何利用MongoDB打造TOP榜小程序
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 交换综合实验一
  • 如何用纯 CSS 创作一个货车 loader
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​插件化DPI在商用WIFI中的价值
  • # 安徽锐锋科技IDMS系统简介
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #AngularJS#$sce.trustAsResourceUrl
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (2)STM32单片机上位机
  • (35)远程识别(又称无人机识别)(二)
  • (5)STL算法之复制
  • (70min)字节暑假实习二面(已挂)
  • (javaweb)Http协议
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十) 初识 Docker file