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

epoll 定时器

参考:

Linux下使用epoll监听定时器-CSDN博客

但是这个用的是gettimeofday。

本人使用的是

#include <stdlib.h>
#include<stdio.h>
#include <sys/timerfd.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <sys/time.h>
#include <stdint.h>void timer_expires(void)
{struct timespec curr;static struct timespec start;static int first_call = 1;if (first_call){first_call = 0;if (clock_gettime(CLOCK_MONOTONIC, &start) == -1)perror("clock_gettime");}if (clock_gettime(CLOCK_MONOTONIC, &curr) == -1)perror("clock_gettime");int secs, nsecs;secs = curr.tv_sec - start.tv_sec;nsecs = curr.tv_nsec - start.tv_nsec;if (nsecs < 0){secs--;nsecs += 1000000000;}printf("%d.%03d \n", secs, (nsecs + 500000) / 1000000);  //四舍五入纳秒转换为毫秒
}int main(int argc, char const *argv[])
{int timefd = timerfd_create(CLOCK_MONOTONIC, 0);if (timefd == -1){perror("timerfd_create failed");}struct itimerspec new_value = {};new_value.it_value.tv_sec = 1;new_value.it_value.tv_nsec = 0;new_value.it_interval.tv_sec = 5;new_value.it_interval.tv_nsec = 0;if (timerfd_settime(timefd, 0, &new_value, NULL) == -1){perror("timerfd_settime failed");}printf("time start-----------\n");timer_expires();/*-------------------------------------------------------------------------*/struct epoll_event ev;ev.data.fd = timefd;ev.events = EPOLLIN; // 文件描述符可读的时候就触发int epollfd = epoll_create(EPOLL_CLOEXEC);if (epollfd == -1){perror("epoll_create failed");}epoll_ctl(epollfd, EPOLL_CTL_ADD, timefd, &ev);/* int epoll_wait(int epfd,struct epoll_event * events, int maxevents,int timeout);epfd :epoll文件描述符events :接口的返回参数,一般都是一个数组,数组长度大于等于maxevents。maxevents:期望捕获的事件的个数。timeout :超时时间(>=0),单位是毫秒ms,-1表示阻塞,0表示不阻塞*/const int maxEvents = 1; // 必须大于1struct epoll_event events[maxEvents];int buf[2];int ret = 0;int i =0;while (1){int nfd = epoll_wait(epollfd, events, maxEvents, -1);if (nfd == -1)perror("epoll_wait failed");for (i = 0; i < nfd; ++i){ret = read(events[i].data.fd, buf, sizeof(buf));if (ret < 0)perror("epoll callback read error");timer_expires();}}return 0;
}

会发现有0.1 的输出,是因为四舍五入的原因,如果要很精确,建议用gettimeofday(未处理)

在Linux中常用的时间结构有struct timespec 和struct timeval 。
下面是两个结构的定义

struct timespec
{
    __time_t tv_sec;        /* Seconds. */
    long   tv_nsec;       /* Nanoseconds. */
};
struct timeval {
        time_t tv_sec;  
        suseconds_t tv_usec;
}; 

两者的区别是timespec的第二个参数是纳秒数,而timeval的第二个参数是毫秒数。
 

相关文章:

epoll 定时器

参考&#xff1a; Linux下使用epoll监听定时器-CSDN博客 但是这个用的是gettimeofday。 本人使用的是 #include <stdlib.h> #include<stdio.h> #include <sys/timerfd.h> #include <sys/epoll.h> #include <unistd.h> #include <sys/time.…...

BUUCTF Java逆向解密 1

Class文件是Java编译后的二进制字节码文件。 我这里使用的是jadx-gui&#xff0c;直接将class文件拖进去即可 package defpackage;import java.util.ArrayList; import java.util.Scanner;/* renamed from: Reverse reason: default package */ /* loaded from: Reverse.clas…...

BUUCTF [MRCTF2020]Ez_bypass1

这道题全程我都是用bp做的 拿到题目 我们查看页面源代码得到 代码审计 我们要用get传入id和gg两个参数&#xff0c;id和gg的值要求不能相等&#xff0c;但是id和gg的md5强比较必须相等 if(isset($_GET[gg])&&isset($_GET[id])) {$id$_GET[id];$gg$_GET[gg];if (md5($…...

深入理解强化学习——强化学习和有监督学习

分类目录&#xff1a;《深入理解强化学习》总目录 通过前文的介绍&#xff0c;我们现在应该已经对强化学习的基本数学概念有了一定的了解。这里我们回过头来再看看一般的有监督学习和强化学习的区别。以图片分类为例&#xff0c;有监督学习&#xff08;Supervised Learning&…...

设计模式 - 结构型模式考点篇:装饰者模式(概念 | 案例实现 | 优缺点 | 使用场景)

目录 一、结构型模式 1.1、装饰者模式 1.1.1、概念 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、结构型模式 1.1、装饰者模式 1.1.1、概念 装饰者模式就是指在不改变现有对象结构的情况下&#xff0c;动态的给该对象增加一些职责&#xff08;增加额外功能&#…...

计算机竞赛 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖&#xff0c;适合作为竞赛课题…...

手撕各种排序

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;掌握每种排序的方法&#xff0c;理解每种排序利弊…...

视频号的链接在哪,视频号视频链接地址获取办法!

不少人问视频号的链接在哪里可以获取&#xff0c;本质的在腾讯微信中目前视频号的链接是无法获取的&#xff0c;但好事多磨今天就分享一个第三方的视频号视频链接地址获取办法&#xff0c;希望对你有所帮助&#xff01; 1&#xff1a;在微信客户端中&#xff0c;我们可以通过搜…...

深度学习笔记之优化算法(六)RMSprop算法的简单认识

深度学习笔记之优化算法——RMSProp算法的简单认识 引言回顾&#xff1a;AdaGrad算法AdaGrad算法与动量法的优化方式区别AdaGrad算法的缺陷 RMProp算法关于AdaGrad问题的优化方式RMSProp的算法过程描述 RMSProp示例代码 引言 上一节对 AdaGrad \text{AdaGrad} AdaGrad算法进行…...

10架构管理之公司整体技术架构

一句话导读 公司的整体技术架构一般是公司的架构组、架构管理部、技术委员会等部门负责&#xff0c;需要对公司整体的技术架构进行把控和管理&#xff0c;确保信息系统的稳定性和可靠性&#xff0c;避免因技术架构不合理而导致的系统崩溃和数据丢失等问题&#xff0c;为公司的业…...

联邦学习综述

《Advances and Open Problems in Federated Learning》 选题&#xff1a;Published 10 December 2019-Computer Science-Found. Trends Mach. Learn. 联邦学习定义 联邦学习是一种机器学习设置&#xff0c;其中多个客户端在中央服务器或服务提供商的协调下协作解决机器学习…...

几行cmd命令,轻松将java文件打包成jar文件

1. 在任意目录下建立一个.java文件 2. 在当前目录下使用cmd命令&#xff1a; javac filename编译 如果报错则使用此命令javac -encoding UTF-8 filename 3.此时已成功生成.class文件 4. 可以手动添加MANIFEST.MF文件 Manifest-Version: 1.0 Main-Class: fileName 5.直接一…...

BuyVM 卢森堡 VPS 测评

description: 发布于 2023-07-05 BuyVM 卢森堡 VPS 测评 产品链接&#xff1a;https://my.frantech.ca/cart.php?gid39 1G口不限流量&#xff0c;续约3个月后升级为10G口突发。抗DMCA版权投诉。抗一般投诉。 大陆连通性还可以&#xff0c;延迟略高&#xff0c;不绕美。 CP…...

JavaScript 编写一个 数值转换函数 万以后简化 例如1000000 展示为 100万 万以下原来数值返回

很多时候 我们看一些系统 能够比较只能的展示过大的数值 例如 到万了 他就能展示出 多少 多少万 看着很奇妙 但实现确实非常的基础 我们只需要一个这样的函数 //数值转换函数 convertNumberToString(num) {//如果传入的数值 不是数字 且也无法转为数字 直接扔0回去if (!parse…...

PyG两个data Datsaset v.s. InMemoryDataset

可以看到InMemoryDataset 对CPU更加友好 https://pytorch-geometric.readthedocs.io/en/latest/modules/data.html#pytorch-lightning-wrappers...

ArcGIS Engine:视图菜单的创建和鹰眼图的实现

目录 01 创建项目 1.1 通过ArcGIS-ExtendingArcObjects创建窗体应用 1.2 通过C#-Windows窗体应用创建窗体应用 1.2.1 创建基础项目 1.2.2 搭建界面 02 创建视图菜单 03 鹰眼图的实现 3.1 OnMapReplaced事件的触发 3.2 OnExtentUpdated事件的触发 04 稍作演示 01 创建项目…...

POI 和 EasyExcel 操作 Excel

一、概述 目前操作 Excel 比较流行的就是 Apache POI 和阿里巴巴的 easyExcel。 1.1 POI 简介 Apache POI 是用 Java 编写的免费开源的跨平台的 Java API&#xff0c;Apache POI 提供 API 给 Java 程序对 Microsoft Office 格式文档读和写的常用功能。POI 为 “Poor Obfuscati…...

pytorch算力与有效性分析

pytorch Windows中安装深度学习环境参考文档机器环境说明3080机器 Windows11qt_env 满足遥感CS软件分割、目标检测、变化检测的需要gtrs 主要是为了满足遥感监测管理平台&#xff08;BS&#xff09;系统使用的&#xff0c;无深度学习环境内容swin_env 与 qt_env 基本一致od 用于…...

Sublime text启用vim模式

官方教程&#xff1a;https://www.sublimetext.com/docs/vintage.html vintage的github&#xff1a;https://github.com/sublimehq/Vintage...

爬虫进阶-反爬破解6(Nodejs+Puppeteer实现登陆官网+实现滑动验证码全自动识别)

一、NodejsPuppeteer实现登陆官网 1.环境说明 Nodejs——直接从官网下载最新版本&#xff0c;并安装 使用npm安装puppeteer:npm install puppeteer npm install xxx -registry https://registry.npm.taobao.org Chromium会自动下载&#xff0c;前提是网络通畅 2.实践操作…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...