计时器

高精度计时器,windows,linux,voworks

余生长醉 提交于 2019-11-28 12:23:56
本文主要介绍 Linux 下高精度时间函数,及相关的具有超时机制的函数,对定时器也进行简单的介绍。 在linux下通常可用的精度最高的时间接口是gettimeofday,它返回一个timeval结构,其精度为us,即10-6 秒,大多数情况这个精度已经够用了。不过有时为了更高的精度,比如纳秒级的时间精度,我们需求探索Linux为我们提供的时间调用。 首先介绍struct timespec结构,这个结构体有两个成员,一个是秒,一个是纳秒。 在librt库中,提供了高精度的时间函数,分别是: long clock_gettime(clockid_t ,struct timespec*) 获取特定时钟的时间,时间通过fp结构传回,目前定义了6种时钟,分别是 CLOCK_REALTIME 系统当前时间,从1970年1.1日算起 CLOCK_MONOTONIC 系统的启动时间,不能被设置 CLOCK_PROCESS_CPUTIME_ID 进程运行时间 CLOCK_THREAD_CPUTIME_ID 线程运行时间 CLOCK_REALTIME_HR CLOCK_REALTIME的高精度版本 CLOCK_MONOTONIC_HR CLOCK_MONOTONIC的高精度版本 获取特定时钟的时间精度: long clock_getres(clockid_t ) 设置特定时钟的时间: long

31、RIP的防环机制

允我心安 提交于 2019-11-28 07:18:30
1、 跳数限制 :max15跳,16跳不可达; 2、 水平分割 :同一路由器从此口进入,不从此口出; 3、 毒性逆转水平分割 ---触发更新:本地若存在断开网段时,将向邻居马上发出更新包,但度量为16--- 毒性 ,用于告知邻居该路径不可达;之后邻居打破 水平分割 限制信息将再次发回来标示确认收到; 发出16跳的毒性包,rip没有ack包,发出后不知道对方是否收到,所以返回来来一次--- 逆转 ; 4、 抑制计时器 :30s 更新,180s失效,180s抑制,240s刷新。 ---当收到的路由条目在无征兆的情况下跳数突然加大,意味着环路已经出现,抑制计时器将抑制这些路由的加表; 1) 更新计时器30s :实现对路由条目的周期交互,默认30s更新(通过UDP520端口)一次路由表中的信息; 2) 失效计时器180s :如果一条路由信息在180s内没有收到更新或确认,那么将这条路由信息标记为“失效”; 30s未收到邻居的更新包-->更新计时器超时。再过150s,达到(30s+150s)还没收到路由更新包-->失效计时期超时,然后将邻居相应路由标记为is possibly down( 此时并不是真正的失效了,是提示快要失效了 ) 3) 抑制计时器180s :如果一条路由更新的跳数大于路由表已记录的该路由跳数,那么将会引起该路由进入180s的抑制时间,用于防止路由环路

设置计时器--液晶显示屏

丶灬走出姿态 提交于 2019-11-28 05:11:11
应用范例 : 使用 TOPWAY Smart LCD (HMT050CC-C) 的计时器 第一步 建立工程 第二步 建立 1 个页面 第三步 设置页面背景图 ① 点击工作区域 , 右面显示页面属性 ② 属性中 Color 页面背景图选择: 000000 第四步 导入 2 张变量图标 ① 于资源窗口中,右击 Icons 选择 Import Icon ② 选中需要导入图标 ③ 点击“打开”按钮,完成 第五步 导入字库 ① 点选菜单栏 Font Setting. ② 点选 44 号右击选“ Select” ③ 选择“ 64_NUM_SevenSegment(40x64)” 字体 . ④ 点击“ Select” 选择 ⑤ 点击“ OK” 完成 第六步 建立计数器元素 ① 点选菜单工具栏 Timer 元素 ② 在 PG0000 页面工作区创建 1 个 Timer 元素 ③ 属性中 Font Color 选择: 0x00FFFF ④ 属性中 Font 选择: 64_NUM_SevenSegment(40x64) ⑤ 属性中 Date/Time Format 选择: mm:ss ⑥ 属性中 Select Timer 选择: 0x02FFE0-Timer0 第七步 建立 N16 变量与关联 VP ① 于资源窗口中,右击 16bit Number Variables 选择 New VP. 创建地址

服务器开发过程中关于计时器的处理

跟風遠走 提交于 2019-11-27 18:47:14
简介 游戏服务器开发过程中经常会需要使用计时器来触发相应的事件,这篇文章主要是将什么时候需要使用计时器,什么不是不需要使用计时器,以及对于用一个例子来说明一些关于计时器的处理。 需求描述 我需要开发一个活动,该活动分为三个阶段,第一阶段为早上十点到下午六点,该阶段玩家可以每隔两个小时领取一项物品;第二阶段为下午六点到下午八点,该阶段玩家可以贡献物品,全服贡献的物品数量会影响下一个阶段玩家获得奖励的品质。第三个阶段为下午八点到第二天下午六点,该阶段玩家可以根据全服贡献的物品数量领取奖励,该阶段与第二天的第一阶段有所重合,但互不影响。 第一阶段:玩家领取免费物品 刚进入第一阶段,没有什么需要系统进行处理的需求,因为前一天领取的物品可以累加到第二天,那么我们就没有必要使用计时器来触发第一阶段的开始,只需要在玩家尝试领取免费物品的时候判断时间是否符合第一阶段即可。每隔两个小时的限制也可以通过记录玩家上一次的领取时间来进行检查。 第二阶段 玩家贡献物品 该阶段的开始实际上是第三阶段的结束,而第三阶段结束时需要清空前一天全服玩家贡献的物品。所以这里需要一个计时器来进行触发,这里我们需要引入一个问题,如果该计时器触发的时间点服务器不在运行,那怎么办? 我们可以根据上一次清空物品贡献的时间来进行处理,如果该时间戳小于今天下午六点,就说明今天的清空贡献物品还没有执行,反之,则已经执行。所以

windows程序设计读书笔记----------(计时器)

只谈情不闲聊 提交于 2019-11-27 18:45:27
windows计时器是一种输入设备,每隔指定时间都会产生一个消息WM_TIMER,消息被放在应用程序消息队列中。WM_TIMER消息的产生不像DOS系统一样通过截获时钟滴答的BIOS中断来实现的,而是设定一个数值,每一个时钟滴答,该值减一,直到为零,产生一个WM_TIMER消息。在windows 98上,计时器具有与底层计时器相同的55毫秒的周期,也就是说没55毫秒产生一个时钟滴答,而windows NT上,其为10毫秒。例如:当windows 98上设置的时钟间隔为1000毫秒时,也就是说讲18个时钟滴答产生一个计时器消息(WM_TIMER). 值得注意的是,当设置的时钟周期小于系统时钟滴答时,每个时钟滴答(55毫秒)都将产生一个计时器消息。 注:在同一时刻只能有一个WM_TIMER消息在消息队列中,且其优先级比较低。 使用计时器的三种方法: 方法一: SetTimer(hwnd,iTimerID,uniMescIerval,NULL);//产生计时器消息,并指定接受消息 第一个参数:其为接受计时器消息的窗口句柄。 第二个参数:其为计时器的ID,不能为0,不同计时器不同 第三个参数:时间间隔 KillTimer(hwnd,iTimerID);//停止产生计时器消息 其中第二个参数的值要与产生计时器的消息的计时器ID相同。 注:当需改变一个计时器的时间间隔时,可以再次调用WM

《Windows程序设计》之计时器2

我怕爱的太早我们不能终老 提交于 2019-11-27 18:42:04
这是使用SetTimer的第二种方法-----回调函数 下面是几行关键的代码 VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD);//定义回调函数 SetTimer(hwnd,ID_TIMER,1000,TimerProc);//设置计时器,并调用回调函数 //回调函数实现 void CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime) { static BOOL fFlipFlop=FALSE; HBRUSH hBrush; HDC hdc; RECT rc; MessageBeep(-1); fFlipFlop=!fFlipFlop; GetClientRect(hwnd,&rc); hdc=GetDC(hwnd); hBrush=CreateSolidBrush(fFlipFlop?RGB(255,0,0):RGB(0,0,255)); FillRect(hdc,&rc,hBrush); ReleaseDC(hwnd,hdc); DeleteObject(hBrush); } 来源: CSDN 作者: l0g1n 链接: https://blog.csdn.net/l0g1n/article/details/7495577

Windows程序设计:计时器

微笑、不失礼 提交于 2019-11-27 18:40:39
我们可以通过调用SetTimer函数建立一个计时器。SetTimer函数有一个时间间隔范围为1~4294967295毫秒(将近50天)的整型参数,这个值指示windows每隔一定时间给您的出现发送一个WM_TIMER消息。 在Windows98中,计时器具有55毫秒的分辨率。在Windows NT中,计时器具有10毫秒的分辨率。Windows不能以高于这一分辨率的速度接受WM_TIMER消息。 SetTimer函数使用方法如下: SetTimer(hwnd, 1, uiMsecInterval, NULL); 第一个参数是其窗口过程将要接受WM_TIMER消息的窗口的句柄。第二个参数是计时器ID,他是一个非0数。第三个参数是一个32位无符号整数,以毫秒为单位指定一个时间间隔。第四个参数为回调函数的地址,若为NULL,则用默认的WndProc。也可以另外指定回叫函数: SetTimer(hwnd, 1, uiMsecInterval, TimerProc); 回叫函数TimerProc可定义如下: VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){} 我们可以调用KillTimer (hwnd, ID_TIMER)在任何时刻停止计时器。 下面的例子,按秒刷新,显示当前时间:

Windows程序设计之计时器

♀尐吖头ヾ 提交于 2019-11-27 18:40:23
一、计时器基础知识 1.计时器是一种输入设备,它周期性地通知应用程序:应用程序根据设定的时间间隔告诉Windows,然后Windows向应用程序周期性地发送WM_TIMER消息 计时器消息:WM_TIMER 2.操作计时器 2.1 设置计时器:SetTimer The SetTimer function creates a timer with the specified time-out value. UINT SetTimer( HWND hWnd, // handle of window for timer messages UINT nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // address of timer procedure ); 2.2停止计时器:KillTimer The KillTimer function destroys the specified timer. BOOL KillTimer( HWND hWnd, // handle of window that installed timer UINT uIDEvent // timer identifier ); 二、应用计时器 方法一:Windows将WM

windows程序设计——计时器

那年仲夏 提交于 2019-11-27 18:40:07
可能不是很直观,但计时器确实算的上一个输入设备。当设置了一个定时器是,系统设置一个计时数,由windows系统接收到硬件的tick信号将计时数减去一定值,当减少到0时,系统在程序的消息队列中加入一条WM_TIMER消息。因此timer消息是个同步消息,与鼠标与键盘的输入一样通过getmesssage获取到消息之后在dispatch到对应的窗口中。定时器还是一种系统资源,若不再需要需要释放。故一下两个API成对使用,调用KillTimer时会清除掉消息队列里边的所有对应的WM_TIMER消息。 //设置定时器 UINT SetTimer( HWND hWnd , //目标窗口句柄,或者lpTimerFunc的参数 UINT nIDEvent, //定时器的ID,自己定义,当为0时不指定id,由系统返回一个id,通过id管理(kill)定时器 UINT uElapse, //定时时间 TIMERPROC lpTimerFunc //回调处理函数 ); //释放定时器 BOOL KillTimer( HWND hWnd, //目标窗口句柄 UINT uIDEvent //定时器的ID,自己定义 ); 使用定时器通常要么通过窗口的消息处理函数处理定时器消息(方法一),要么通过设置的回调函数处理(方法二、方法三)。 方法一: /*-------------------------------

jQuery计时器插件

自作多情 提交于 2019-11-27 04:09:52
/* * * 定义一个jQuery计时插件,实现记录计时开始时间、结束时间,总共耗时的功能 * @param $ * * @author Ivan 2862099249@qq.com * @date 2014年11月25日 下午8:48:55 * @version V1.0 * */ ( function ($){ $.timer = {}; /* * * 扩展Date对象,为其增加一个格式化方法 * @param format 传入日期格式,如yyyy-MM-dd hh:mm:ss * @returns */ Date.prototype.format = function (format) { var o = { "M+" : this .getMonth() + 1, // month "d+" : this .getDate(), // day "h+" : this .getHours(), // hour "m+" : this .getMinutes(), // minute "s+" : this .getSeconds(), // second "q+" : Math.floor(( this .getMonth() + 3) / 3), // quarter "S" : this .getMilliseconds() // millisecond }; if (