windows - 具有唯一 ID 的 SetTimer

标签 windows winapi timer

我想为一个窗口设置一个定时器,但我不知道那个窗口是否已经有定时器在运行。如果是这样,我不想覆盖其中任何一个,所以我需要选择一个免费的计时器 ID。 MSDN 对我的情况没有帮助,他们描述了几乎所有的排列,除非你有一个 hwnd 并且不想更换计时器。

因此,如果可以将 0 或其他内容作为 nIDEvent 并让 Windows 自动创建一个新的 uniqe id,或者是否有某种方法可以列出当前正在运行的计时器以便我可以避免使用其中的任何一个?

SetTimer 的 MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644906%28v=vs.85%29.aspx

最佳答案

正如@Jonathan Potter 所说, 你可以这样写:

VOID CALLBACK TimerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    BOOL bRetKill = ::KillTimer(NULL, idEvent);
    // do something
}

void CSomeModel::StartTimer()
{ 
    UINT_PTR hSetTimer = ::SetTimer(NULL, 0, 1000, TimerCallback);
}

每次调用::SetTimer 时,idEvent ID 都是唯一的。

关于windows - 具有唯一 ID 的 SetTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571092/

相关文章:

Windows 递归 grep 命令行

c++ - 如何移动到文件夹并执行 Windows 命令行调用

c++ - 搜索框的自定义组合框

ios - 使应用程序在后台删除和更新核心数据( objective-c )

c# - 当系统处于休眠状态时,Windows 服务中的计时器如何运行?

c++ - 使用C++ Makefile.win检测Windows的i386 vs x64?

windows - 运行批处理文件,在卸载时使用 Wix 安排任务

c++ - Win32 API 打印不要求用户输入

c - 如何将 key 发送到 Half Life 1 窗口?

c - printf保存keepalive定时器