一个很好的延时类,在某些时候比timer更易用,不易假死

preview
5星 · 超过95%的资源 需积分: 0 201 下载量 41 浏览量 更新于2008-11-05 3 收藏 4KB TXT 举报
### 延时类clsWaitableTimer的知识点详解 #### 一、概述 根据所提供的信息,我们可以了解到这是一个基于`clsWaitableTimer`类实现的延时功能模块,它相较于传统的`Timer`控件具备更好的稳定性和灵活性。在某些场景下(如需要精确控制延迟时间或者避免程序假死的情况),`clsWaitableTimer`可以提供更为优秀的解决方案。 #### 二、基本原理与API介绍 `clsWaitableTimer`是通过Windows API中的`CreateWaitableTimer`、`SetWaitableTimer`等函数来实现延时功能的。这些API允许开发者创建可等待的定时器对象,并设置其触发条件,从而实现精确的延时操作。 ##### 1. `CreateWaitableTimer` 用于创建一个新的可等待定时器对象。 - **参数**: - `lpSemaphoreAttributes`:长整型,用于指定对象的安全属性。 - `bManualReset`:布尔值,指明定时器是否为手动重置类型。 - `lpName`:字符串,定时器对象的名字。 ##### 2. `SetWaitableTimer` 用于设置可等待定时器的到期时间和周期。 - **参数**: - `hTimer`:长整型,定时器句柄。 - `lpDueTime`:结构体`FILETIME`,到期时间。 - `lPeriod`:长整型,周期时间。 - `pfnCompletionRoutine`:长整型,完成例程的地址。 - `lpArgToCompletionRoutine`:长整型,传递给完成例程的数据。 - `fResume`:长整型,指明是否应恢复暂停的线程。 ##### 3. `CancelWaitableTimer` 用于取消一个已设置的可等待定时器。 - **参数**: - `hTimer`:长整型,定时器句柄。 ##### 4. `CloseHandle` 用于关闭一个已经打开的对象句柄。 - **参数**: - `hObject`:长整型,对象句柄。 ##### 5. `WaitForSingleObject` 用于等待单个对象变为指定状态。 - **参数**: - `hHandle`:长整型,对象句柄。 - `dwMilliseconds`:长整型,等待的时间。 ##### 6. `MsgWaitForMultipleObjects` 用于等待多个对象变为指定状态,同时监听消息队列。 - **参数**: - `nCount`:长整型,对象数量。 - `pHandles`:长整型数组,对象句柄数组。 - `fWaitAll`:长整型,是否等待所有对象。 - `dwMilliseconds`:长整型,等待的时间。 - `dwWakeMask`:长整型,唤醒掩码。 #### 三、使用范例分析 ```vb Private Sub Command1_Click() Dim objTimer As New clsWaitableTimer objTimer.Wait 5000 Set objTimer = Nothing End Sub ``` 在示例代码中,首先创建了一个`clsWaitableTimer`类型的对象`objTimer`。然后调用`Wait`方法,使得当前线程等待5000毫秒(即5秒)。最后将`objTimer`对象设置为`Nothing`,释放资源。 #### 四、关键常量解析 - **WAIT_ABANDONED**: 定义了线程放弃对某个对象的所有权的状态。 - **WAIT_FAILED**: 指明等待操作失败。 - **WAIT_IO_COMPLETION**: I/O完成端口的事件被触发。 - **WAIT_OBJECT_0**: 第一个等待对象变为可等待状态。 - **WAIT_OBJECT_1**: 第二个等待对象变为可等待状态。 - **WAIT_TIMEOUT**: 指明等待超时。 - **INFINITE**: 无限等待。 - **ERROR_ALREADY_EXISTS**: 错误代码,表示对象已存在。 - **QS_HOTKEY**: 指定等待热键消息。 - **QS_KEY**: 指定等待键盘消息。 - **QS_MOUSEBUTTON**: 指定等待鼠标按钮消息。 - **QS_MOUSEMOVE**: 指定等待鼠标移动消息。 - **QS_PAINT**: 指定等待绘图消息。 - **QS_POSTMESSAGE**: 指定等待发送消息。 - **QS_SENDMESSAGE**: 指定等待发送消息完成。 - **QS_TIMER**: 指定等待计时器消息。 - **QS_MOUSE**: 结合鼠标移动和鼠标按钮消息。 - **QS_INPUT**: 结合键盘和鼠标消息。 - **QS_ALLEVENTS**: 结合所有输入和计时器、绘图、热键消息。 - **QS_ALLINPUT**: 结合所有可能的消息。 #### 五、应用场景 1. **精确延时**:在需要精确控制延时时间的场景下使用,例如游戏开发中的帧同步。 2. **避免程序假死**:当需要延时时,使用`clsWaitableTimer`代替传统的`DoEvents`或`Sleep`方法,可以有效防止程序卡顿或假死。 3. **多线程任务调度**:在多线程环境中,可以利用`clsWaitableTimer`实现线程间的同步或异步通信。 `clsWaitableTimer`是一个功能强大的延时类,它不仅提供了比传统`Timer`控件更灵活的延时控制机制,而且还能够有效提高程序的稳定性和响应性。通过对上述知识点的掌握,开发者可以在实际项目中更加高效地利用此类进行延时控制。
无·法
  • 粉丝: 1326
  • 资源: 242
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源