在前面介绍了一对定时器的API函数使用,现在又介绍另外一对API函数的使用。它使用起来比前的函数要简单一些,但它一般是使用到有窗口的程序里,并且它的精度也没有前面的API函数高,对于一些要求不高的场合还是非常合适的。它是采用消息通知的方式,每当定时到了就会收到一条消息。
函数SetTimer和KillTimer声明如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// C#
[ ]
static extern IntPtr SetTimer(IntPtr hWnd, IntPtr nIDEvent, uint uElapse, TimerProc lpTimerFunc);
delegate void TimerProc(IntPtr hWnd, uint uMsg, IntPtr nIDEvent, uint dwTime);
// or alternatively
[ ]
static extern IntPtr SetTimer(IntPtr hWnd, IntPtr nIDEvent, uint uElapse, IntPtr lpTimerFunc);
[ ]
[ ]
static extern bool KillTimer(IntPtr hWnd, IntPtr uIDEvent);
// VB
<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SetTimer _
(ByVal hWnd As IntPtr, ByVal nIDEvent As IntPtr, ByVal uElapse As UInteger, ByVal lpTimerFunc As IntPtr) As IntPtr
End Function
// or alternatively
<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SetTimer _
(ByVal hWnd As IntPtr, ByVal nIDEvent As IntPtr, ByVal uElapse As UInteger, ByVal lpTimerFunc As TimerProc) As IntPtr
End Function
Public Delegate Sub TimerProc(ByVal hWnd As IntPtr, ByVal uMsg As UInteger, ByVal nIDEvent As IntPtr, ByVal dwTime As UInteger)
<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function KillTimer(ByVal hWnd As IntPtr, ByVal nIDEvent As IntPtr) As Boolean
End Function
hWnd是窗口接收定时器的句柄。
nIDEvent是定时器事件标识号。
uElapse是定时器的毫秒值。
lpTimerFunc是定时到达回调函数。
调用函数的例子如下:
1 |
|