电子计时器简介
1、电子计时器计数部分由震荡器、分频器、计数器、译码显示等部分组成。
石英晶体振荡器产生的标准信号送入分频器,分频器将时标信号分频为每秒一次的方波作为秒信号送入计数器进行计数,并把累计的结果以“时”“分”秒等数字显示出来,其中“秒”的显示有两级计数器和译码器组成的六十进制计数器实现,“分”的显示也一样。而“时”的显示由两级计数器和译码器组成的二十四进制计数电路实现。
2、校准电路当刚接通电源或钟表走时出现误差时,须进行时间校准。
3、正点报时电路:控制电路采用译码器或用与非门接到分计数器和秒计数器相应的输出端。使计数器进行到差10秒整点自动发出鸣叫声。
计时器的种类
1、更新计时器(Updata Timer):
RIP协议平均每隔30s(默认值)从每个启动RIP协议的接口不断地发送出响应消息。这个周期性的更新由更新计时器进行初始化,并且包含一个随机变化量用来防止表的同步。
2、无效计时器(Invalidation Timer)/ 超时计时器(Timeout Timer):
无效计时器用来限制停留在路由选择表中的路由未被更新的时间。无论什么时候,当有一条新的路由建立成功后,超时计时器就会被初始化为180s(默认值),而每当接收到这条路由的更新报文时,超时计时器又将被重置成计时器的初始化值。如果一条路由的更新在180s(6个更新周期)内还没有收到,那么这条路由的跳数将变成16,也就是标记为不可达路由。
3、垃圾收集(Garbage Collection)/ 刷新计时器(Flush Timer):
这个计时器所设置的时间长度一般比无效计时器/限时计时器的时间长240~60s(Cisco路由器使用60s的垃圾收集计时器,虽然RFC1058规定为120s)。如果垃圾收集计时器也超时了,则该路由将被通告为一条度量值为不可到达的路由,同时从路由选择表中删除该路由。
4、抑制计时器(Holddown Timer):
用于抑制更新机制,Cisco的路由器中运行的RIP协议使用了它们。如果一条路由更新的跳数大于路由选择表已记录的该路由的跳数,那么将会引起该路由进入长达180s(即6个路由更新周期)的抑制状态阶段。
计时器的三种使用方法
方法一:
*简单的方法,他让windows将WM_TIMER消息发送到应用程序的正常窗口过程中。
SetTimer的调用如下:
SetTimer(hwnd,1,uiMsecInterval,NULL)
hwnd是接收消息的窗口句柄
1是计时器的ID,当然也可以为非0的其他数
uiMsecInterval是以毫秒为单位的时间间隔
NULL表示不用回调函数(方法二会讲到)
我们还得调用KillTimer(hwnd,1)函数停止WM_TIMER消息(即使正在处理此消息)。
hwnd为句柄
1为计时器的ID。
方法二:
将计时器的消息发送给程序的另一个函数,而不是通常的窗口过程。此函数就是窗口函数,这是一个在程序之中,由os调用的函数。我们必须先告诉os此函数的地址,然后os才调用此函数。就像我们注册窗口类的时候,告诉其窗口过程函数的地址一样的道理。
SetTimer(hwnd,1,uiMsecInterval,TimerProc)
TimerProc是回调函数的名字。
回调函数的定义如下:
void CALLBACK TimerProc(hwnd,message,iTimerID ,dwTime)
hwnd 接收消息的窗口句柄
message 总是为WM_TIMER
iTimerID 计时器的ID
dwTime 是从GetTickCount函数返回值兼容的值
方法三:
和方法二类似,只是传递给SetTimer函数的hwnd参数被设置为NULL,并且**个参数计时器的ID被忽略了,*后此函数返回计时器ID。
iTimerID = SetTimer(NULL,0,uiMsecInterval,TimerProc);如果没有计时器可用,那么返回NULL。
KillTimer的**个参数也必须是NULL,**个参数是上一个函数返回的计时器ID。
KillTimer(NULL,iTimerID)。
此方法已经很少被使用了,如果在您的程序里面有一系列的不同时刻的SetTimer调用,而又不希望跟踪您已经用过了那些计时器ID,那么使用此方法是很方便的。