CreateWaitableTimerW 函数 (synchapi.h)
创建或打开可等待的计时器对象。
若要为对象指定访问掩码,请使用 CreateWaitableTimerEx 函数。
语法
HANDLE CreateWaitableTimerW(
[in, optional] LPSECURITY_ATTRIBUTES lpTimerAttributes,
[in] BOOL bManualReset,
[in, optional] LPCWSTR lpTimerName
);
参数
[in, optional] lpTimerAttributes
指向 SECURITY_ATTRIBUTES 结构的指针,该结构指定新计时器对象的安全描述符,并确定子进程是否可以继承返回的句柄。
如果 lpTimerAttributesNULL,计时器对象将获取默认的安全描述符,并且无法继承句柄。 计时器的默认安全描述符中的 ACL 来自创建者的主要或模拟令牌。
[in] bManualReset
如果此参数 TRUE,计时器是手动重置通知计时器。 否则,计时器是同步计时器。
[in, optional] lpTimerName
计时器对象的名称。 名称限制为 MAX_PATH 个字符。 名称比较区分大小写。
如果 lpTimerNameNULL,则创建计时器对象时不带名称。
如果 lpTimerName 与现有事件、信号灯、互斥体、作业或文件映射对象的名称匹配,则函数将失败,GetLastError 返回 ERROR_INVALID_HANDLE。 之所以发生这种情况,是因为这些对象共享相同的命名空间。
该名称可以具有“全局”或“本地”前缀,以在全局或会话命名空间中显式创建对象。 名称的其余部分可以包含除反斜杠字符(\)以外的任何字符。 有关详细信息,请参阅 内核对象命名空间。 快速用户切换是使用终端服务会话实现的。 内核对象名称必须遵循终端服务概述的准则,以便应用程序能够支持多个用户。
可以在专用命名空间中创建对象。 有关详细信息,请参阅 对象命名空间。
返回值
如果函数成功,则返回值是计时器对象的句柄。 如果在函数调用之前存在命名计时器对象,该函数将返回现有对象的句柄,GetLastError 返回 ERROR_ALREADY_EXISTS。
如果函数失败,则返回值 NULL。 若要获取扩展的错误信息,请调用 GetLastError。
言论
CreateWaitableTimer 返回的句柄是使用 TIMER_ALL_ACCESS 访问权限创建的;它可用于需要计时器对象的句柄的任何函数,前提是调用方已被授予访问权限。 如果计时器是从模拟其他用户的服务或线程创建的,则可以在创建计时器时向其应用安全描述符,或者通过更改其默认 DACL 来更改创建过程的默认安全描述符。 有关详细信息,请参阅 同步对象安全和访问权限。
调用进程的任何线程都可以在调用其中一个 等待函数中指定计时器对象句柄。
多个进程可以具有对同一计时器对象的句柄,从而允许使用该对象进行进程间同步。
- 如果 createWaitableTimer 的
lpTimerAttributes 参数启用了继承,则 CreateProcess 函数创建的进程可以继承计时器对象。 - 进程可以在调用 DuplicateHandle 函数时指定计时器对象句柄。 生成的句柄可由另一个进程使用。
- 进程可以在调用 OpenWaitableTimer 或 CreateWaitableTimer 函数中指定计时器对象的名称。
若要编译使用此函数的应用程序,请将 _WIN32_WINNT 定义为0x0400或更高版本。 有关详细信息,请参阅 使用 Windows 标头。
若要将计时器与窗口相关联,请使用 SetTimer 函数。
例子
有关使用 createWaitableTimer
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2003 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | synchapi.h (包括 Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |