evtCancel 函数 (winevt.h)

取消句柄上的所有挂起操作。

语法

BOOL EvtCancel(
  EVT_HANDLE Object
);

参数

Object

要取消其操作的句柄。 可以取消以下操作:

若要取消 EvtClearLogEvtExportLogEvtQueryEvtSubscribe 操作,必须传递会话句柄。 若要指定默认会话 (本地会话) ,请将此参数设置为 NULL

返回值

返回代码/值 说明
TRUE
函数成功。
FALSE
函数失败。 若要获取错误代码,请调用 GetLastError 函数。

注解

使用此函数可取消长时间运行的操作。 例如,由于筛选了数千条事件记录,理论上调用 EvtNext 函数可能需要很长时间。 调用 EvtCancel 将停止 EvtNext 函数处理进一步的事件记录。 请注意, 函数可能无法立即停止操作。

完成后,必须调用 EvtClose 函数以关闭句柄。

以下过程介绍如何取消长时间运行的操作。

取消长时间运行的操作

  1. 线程 A 调用长时间运行的操作 (例如 EvtSeek 函数) 。
  2. 线程 B 想要取消并关闭所有操作,因此线程 B 调用 EvtCancel 函数。
  3. 然后,线程 B 通过与线程 A 同步) ,等待所有挂起的调用完成 (。 由于调用了 EvtCancel 函数,因此线程 A 应在调用 EvtCancel 后不久完成。
  4. 线程 A 完全完成 (EvtSeek) 的操作后,线程 B 可以使用 EvtClose 函数关闭查询结果句柄。
正在停止的操作将返回错误代码为 ERROR_CANCELLED。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winevt.h
Library Wevtapi.lib
DLL Wevtapi.dll