一个很好的延时类,在某些时候比timer更易用,不易假死
5星 · 超过95%的资源 需积分: 0 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
最新资源
- 绿色全要素生产率测算(SBM模型:代码+案例+数据)-最新出炉.zip
- 面板门槛回归模型:理论讲解、命令操作及具体案例全解-最新出炉.zip
- 面板数据熵权法Stata代码命令及样本数据(含正负向指标)-最新出炉.zip
- 企业社会保险缴费负担数据资料-最新出炉.zip
- 彭博ESG评级数据(2006-2022,评级体系更新)-最新出炉.zip
- 权威发布:2000-2021年31省环境污染治理投资占GDP比重数据-最新出炉.zip
- 全国30个省份2000-2021年固定资本存量、固定资本形成总额及固定资产投资价格指数数据-最新出炉.zip
- 全国30个省份2001-2020年制造业细分30行业产值数据(含农副食品加工等行业)-最新出炉.zip
- 全国31个省份2000-2023年水资源用水量数据(地下、地表,各领域)-最新出炉.zip
- 全国31个省份2000-2022年金融发展水平指数及金融机构存贷款余额、地区生产总值GDP数据-最新出炉.zip
- 全国31个省份2000-2023年城市农村居民最低生活保障人数数据-最新出炉.zip
- 全国30省经济、地理距离、经济地理嵌套权重矩阵数据-最新出炉.zip
- 全国421个地市州2000-2021年居民生活水平数据(人均GDP等)-最新出炉.zip
- 全国31个省份2010-2020年省级服务贸易数据(金融、电信等领域)-最新出炉.zip
- 全国各地区分省、市、州、区县多分辨率DEM高程TIF栅格数据(12.5m-1KM)-最新出炉.zip
- 全国分省份1998-2022年居民人均消费支出数据-最新出炉.zip
- 1
- 2
- 3
前往页