evtCancel 函数 (winevt.h)
取消句柄上的所有挂起操作。
语法
BOOL EvtCancel(
EVT_HANDLE Object
);
参数
Object
要取消其操作的句柄。 可以取消以下操作:
若要取消 EvtClearLog、 EvtExportLog、 EvtQuery 和 EvtSubscribe 操作,必须传递会话句柄。 若要指定默认会话 (本地会话) ,请将此参数设置为 NULL。返回值
返回代码/值 | 说明 |
---|---|
|
函数成功。 |
|
函数失败。 若要获取错误代码,请调用 GetLastError 函数。 |
注解
使用此函数可取消长时间运行的操作。 例如,由于筛选了数千条事件记录,理论上调用 EvtNext 函数可能需要很长时间。 调用 EvtCancel 将停止 EvtNext 函数处理进一步的事件记录。 请注意, 函数可能无法立即停止操作。
完成后,必须调用 EvtClose 函数以关闭句柄。
以下过程介绍如何取消长时间运行的操作。
取消长时间运行的操作
- 线程 A 调用长时间运行的操作 (例如 EvtSeek 函数) 。
- 线程 B 想要取消并关闭所有操作,因此线程 B 调用 EvtCancel 函数。
- 然后,线程 B 通过与线程 A 同步) ,等待所有挂起的调用完成 (。 由于调用了 EvtCancel 函数,因此线程 A 应在调用 EvtCancel 后不久完成。
- 线程 A 完全完成 (EvtSeek) 的操作后,线程 B 可以使用 EvtClose 函数关闭查询结果句柄。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | winevt.h |
Library | Wevtapi.lib |
DLL | Wevtapi.dll |