Using Timer Queues

低精度定时器 (timer_list) 和 高精度定时器 (hrtimer) Linux内核提供两种定时器:低精度(timer_list)和高精度(hrtimer)。timer_list基于jiffies实现毫秒级精度,适合简单任务,通过timer_setup初始化和mod_timer启动。hrtimer提供纳秒级精度,适用于实时系统,使用hrtimer_init初始化和hrtimer_start启动。两种定时器都需要正确设置回调函数并在模块卸载时取消定时器。示例代码展示了5秒低精度定时器和500微秒高精度定时器的实现方法,包括初始化、设置和清理流程。 阅读详情
Using Timer Queues (Windows)
Using Timer Queues

The following example creates a timer routine that will be executed by a thread from a timer queue after a 10 second delay. First, the code uses the CreateEvent function to create an event object that is signaled when the timer-queue thread completes. Then it creates a timer queue and a timer-queue timer, using the CreateTimerQueue and CreateTimerQueueTimer functions, respectively. The code uses the WaitForSingleObject function to determine when the timer routine has completed. Finally, the code calls DeleteTimerQueue to clean up.

For more information on the timer routine, see WaitOrTimerCallback.
Copy



#include
#include

HANDLE gDoneEvent;

VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
{
if (lpParam == NULL)
{
printf("TimerRoutine lpParam is NULL/n");
}
else
{
// lpParam points to the argument; in this case it is an int

printf("Timer routine called. Parameter is %d./n",
*(int*)lpParam);
if(TimerOrWaitFired)
{
printf("The wait timed out./n");
}
else
{
printf("The wait event was signaled./n");
}
}

SetEvent(gDoneEvent);
}

int main()
{
HANDLE hTimer = NULL;
HANDLE hTimerQueue = NULL;
int arg = 123;

// Use an event object to track the TimerRoutine execution
gDoneEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (NULL == gDoneEvent)
{
printf("CreateEvent failed (%d)/n", GetLastError());
return 1;
}

// Create the timer queue.
hTimerQueue = CreateTimerQueue();
if (NULL == hTimerQueue)
{
printf("CreateTimerQueue failed (%d)/n", GetLastError());
return 2;
}

// Set a timer to call the timer routine in 10 seconds.
if (!CreateTimerQueueTimer( &hTimer, hTimerQueue,
(WAITORTIMERCALLBACK)TimerRoutine, &arg , 10000, 0, 0))
{
printf("CreateTimerQueueTimer failed (%d)/n", GetLastError());
return 3;
}

// TODO: Do other useful work here

printf("Call timer routine in 10 seconds.../n");

// Wait for the timer-queue thread to complete using an event
// object. The thread will signal the event at that time.

if (WaitForSingleObject(gDoneEvent, INFINITE) != WAIT_OBJECT_0)
printf("WaitForSingleObject failed (%d)/n", GetLastError());

CloseHandle(gDoneEvent);

// Delete all timers in the timer queue.
if (!DeleteTimerQueue(hTimerQueue))
printf("DeleteTimerQueue failed (%d)/n", GetLastError());

return 0;
}

Celery源码分析(四)--------Blueprint各组件start流程 上一节讲了Worker主要通过Blueprint来提供服务,Worker的启动流程就是Blueprint各个步骤的启动流程,Blueprint有以下几个核心步骤: default_steps = set([ 'celery.worker.components:Hub', 'celery.worker.components:Queues', 'c 阅读详情

相关推荐

手把手教你用VCS+Verdi在Linux下仿真蜂鸟E203 RISC-V核(附波形调试技巧)

本文详细介绍了在Linux环境下使用VCS和Verdi工具链对蜂鸟E203 RISC-V核进行仿真验证的完整流程。从环境配置、工程结构解析到VCS编译优化和Verdi波形分析技巧,提供了实战性强的调试方法和性能优化策略,帮助工程师高效完成数字IC验证工作。

weixin_42531163的博客 415

Windows系统中的 Timer Queues 、SetTimer

今日比较了一下Windows系统中的 Timer Queues(http://msdn.microsoft.com/en-us/library/ms686796%28VS.85%29.aspx)与 SetTimer (http://msdn.microsoft.com/en-us/library/ms644906%28VS.85%29.aspx)这两种定时器。   发现这两种定时器的一

klarclm的专栏 874

海康SDK回调PS流解析实战:从字节流到前端H264播放的完整流程

本文详细介绍了海康SDK回调PS流解析的完整流程,从字节流获取到前端H264播放的实现。涵盖SDK初始化、PS流数据结构解析、H264裸流提取、WebSocket传输及前端播放器集成等关键步骤,为视频监控系统开发提供实用指导。

weixin_29061531的博客 200

muduo网络库学习笔记(三)TimerQueue定时器队列

目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结构. Timer ...

weixin_30648963的博客 401

Rsoft仿真实战:长周期光纤光栅参数优化与模式耦合分析

本文详细介绍了使用Rsoft软件进行长周期光纤光栅(LPFG)参数优化与模式耦合分析的实战方法。通过Rsoft仿真,可以高效优化光栅周期、包层厚度等关键参数,深入分析纤芯模与包层模的耦合特性,为光纤通信和传感应用提供可靠的设计依据。

h0i1j2k3l的博客 1115

TimerQueue类详解

TimerQueue.h #ifndef MUDUO_NET_TIMERQUEUE_H #define MUDUO_NET_TIMERQUEUE_H #include #include #include #include #include #include #include namespace muduo { namespace

阳光梦的专栏 2988

arcgis计算栅格平均值

打开FC栅格数据和非水体矢量数据 利用矢量数据提取对应栅格的非水体部分 2.1打开空间分析工具à提取分析à按掩膜提取 输入对应栅格数据和矢量数据 2.2提取结果如下 进行计算FC平均值 3.1打开空间分析工具à多元分析à波段集统计 输入对应栅格和输出路径 3.2统计结果如下 ...

Z_W_H_的博客 5371

c# timer 销毁_.NET中Timer 如何正确地被Dispose

原标题:.NET中Timer 如何正确地被Dispose转自:PowerCodercnblogs.com/OpenCoder/p/10728839.htmlSystem.Threading.Timer是.NET中一个定时触发事件处理方法的类(本文后面简称Timer),它背后依靠的是.NET的线程池(ThreadPool)所以当Timer在短时间内触发了过多的事件处理方法后,可能会造成事件处理方法在...

weixin_35779220的博客 2153

芒果YOLOv1改进35:主干Backbone篇之MobileViTv3:全网首发最新 MobileViTv3 系列最强改进版本(三)|轻量化Transformer视觉转换器,简单有效地融合了本地全局

芒果YOLOv1改进35:主干Backbone篇之MobileViTv3:全网首发最新 MobileViTv3 系列最强改进版本(三)|轻量化Transformer视觉转换器,简单有效地融合了本地全局

包括YOLOv5、YOLOv7、YOLOv8等模型改进 415

SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人

本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J

baidu_35680696的博客 511

nrf51822 app_timer

它的源代码和头文件分别为app_timer.c/app_timer.h。这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作为了一个资源进行管理,所以会有初始化、创建等过程。     nrf51822的SDK采用封装思想,需要暴露给用户的信息都在相关模块的头文件中;为了提醒用户不去看具体实现细节,我们可以发现相关的A

学无止境 好学深思 9635

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

内核定时器,schedule_timeout, ,POSIX timer

一、内核timer 1、内核定时器 init_timeout,mod_timer,add_timer ----------- 通过软中断实现。将定时器按照超时时间分为五组,每个tick都会触发执行定时器软中断检查是否有超时的定时器。 2、hrtimer ----------- 高分辨率定时器,HRTIMER_CB_SOFTIRQ类型的hrtimer通过软中断实现。 3、schedule_

安子自语 3450

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

nordic 51822 sdk. timer 的使用

它的源代码和头文件分别为app_timer.c/app_timer.h。这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作为了一个资源进行管理,所以会有初始化、创建等过程。 nrf51822的SDK采用封装思想,需要暴露给用户的信息都在相关模块的头文件中;为了提醒用户不去看具体实现细节,我们可以发现相关的API,比...

weixin_30652897的博客 286

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ACE_Abstract_Timer_Queue

文章目录ACE_Abstract_Timer_Queue模板参数成员类型成员函数is_emptyearliest_timescheduleexpireexpire_singlereset_intervalcancelclosegettimeofdaycalculate_timeoutcurrent_time ACE_Abstract_Timer_Queue template<typename TYPE> class ACE_Abstract_Timer_Queue; 所有单类型定时器队列的基类

qq_41278986的博客 482

JAVA Timer 的使用例子

Java 的 java.util 中有 Timer 这个类,在处理一些定时执行的程序或者重复多次执行的程序时就比较有用。而在这里面有几个比较重要的类: 1. Task Queue 在内部,Timer 使用 TaskQueues 来维护要处理的任务。这些任务会被 TimerThread  顺序的执行. 2. Timer Thread Timer Thread 会监视 Task Queues

u010683915的专栏 517

net 控制台 定时_.NET中Timer 如何正确地被Dispose

(给DotNet加星标,提升.Net技能)转自:PowerCodercnblogs.com/OpenCoder/p/10728839.htmlSystem.Threading.Timer是.NET中一个定时触发事件处理方法的类(本文后面简称Timer),它背后依靠的是.NET的线程池(ThreadPool)所以当Timer在短时间内触发了过多的事件处理方法后,可能会造成事件处理方法在线程...

weixin_39819661的博客 207

java timer 闪烁_java-改善我的JLabel闪烁

使用javax.swing.TImer.看一个例子:编辑:使用不同的变量,如前所述,计数器变量显示相同的值.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class LabelExample {private Timer timer;private JButton button;private JLabe...

weixin_35316606的博客 338

Linux 内核时钟之触发local timer

/*  * Called by the local, per-CPU timer interrupt on SMP.  */ void run_local_timers(void) {  struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]); hrtimer_run_queues();  /* Raise the

星空探索 1519

nRF52(SDK12)添加定时器任务

在裸机程序中,有timer例子,直接使用没有任何问题,但是不能直接用在BLE程序中。在BLE程序中使用就有些麻烦,BLE本身也使用了定时器,如果APP再使用算是借用。SDK12的BLE例子中也没有找到完整的例子。网上找到nrf52 Application Timer和nrf52-添加定时任务。 前者例子: // General application timer settings. #define...

Android/Linux的专栏 2064

Direct Component/SEDA Component/VM Component/Timer Component/Log Component/Cache Component

http://camel.apache.org/direct.html Direct Component The direct: component provides direct, synchronous invocation of any consumers when a producer sends a message exchange. This endpoint can be us

走马观花 3638

linux 中高精度timer的实现

软超时处理的入口是hrtimer_run_softirq,这个线程中会找到达到了软超时的task(__hrtimer_run_queues),判断它没有disable(tasklet_struct->count==0)且处于TASKLET_STATE_SCHED的task(软超时的任务,__run_hrtimer),执行它的func或callback,并更新下一个即将到达的软超时时间。,并更新超时时间,这样如果是用户调用的nanosleep,则在返回用户空间前,会自动重新调nanosleep。

qq_37517281的博客 575

linux高精度模式,Linux hrtimer分析--未配置高精度模式

2.hrtimer的基本操作Linux的传统定时器通过时间轮算法实现(timer.c),但hrtimer通过红黑树算法实现。在struct hrtimer里面有一个node域,类型为struct rb_node,这个域代表了hrtimer在红黑树中的位置。2.1 hrtimer_starthrtimer_start函数将一个hrtimer加入到一个按照到期时间排序的红黑树中,其主要流程为:int...

weixin_42160278的博客 366

[softlockup crash分析]一个和timer相关的死锁分析

设备crash,提示 PANIC: “Kernel panic - not syncing: softlockup: hung tasks” 。遇到这个要先确认是真死锁还是软中断执行时间过长被误判死锁。 有个简单的办法区分,就是如果异常栈crash在锁等待,那么就是真死锁;如果crash在其他地方,大概率就是执行时间过长被误判死锁。 查看异常栈: PID: 0 TASK: ffffffff819c5460 CPU: 0 COMMAND: "swapper/0" #0 [ffff88007f

1078
上一篇: .Net下的签名与混淆
下一篇: 收集点关于FS寄存器的资料
mindva
博客等级 码龄19年 2粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值