c ++中的multiple :: setTimer

时间:2011-06-28 12:47:23

标签: c++ windows

我需要使用具有相同EventID的:: SetTimer函数的多个计时器。这可能/一个好主意用:: CreateWindow创建多个窗口句柄,然后将每个计时器分配给创建的窗口句柄?还有其他选择吗?


编辑:无论如何,我只想知道这里发生了什么:

int eventID = 0;
hWnd1 = ::CreateWindow(...);
hWnd2 = ::CreateWindow(...);
::SetTimer(hWnd1, eventID, ...);
::SetTimer(hWnd2, eventID, ...);

每个hWnd都有自己的eventID列表吗?他们是独立处理的吗?我不想讨论这种设计是否有意义。

3 个答案:

答案 0 :(得分:3)

来自http://msdn.microsoft.com/en-us/library/ms644906%28v=vs.85%29.aspx

  

计时器标识符nIDEvent是   特定于相关窗口。   另一个窗口可以有自己的计时器   它具有与a相同的标识符   另一个窗口拥有的计时器。该   定时器是截然不同的。

答案 1 :(得分:0)

如果您使用相同的EventID,您应该可以使用相同的计时器,但间隔时间不同。您可以使用KillTimer()简单地删除旧版本,然后使用SetTimer()创建另一个,或多或少会触发。如果你的情况不可能,那很可能你的程序设计存在缺陷。

考虑使用不同的EventID,并为我们提供更多信息,说明为什么你觉得这样做是必要的。你很可能不想创建随机窗口,如果他们只是为了让定时器消息注册到他们的目的。这听起来像是一个混乱的黑客,会产生不必要的计算和低效的开销。

当然,计时器实际上并不要求你将hWnd与它相关联。 hWnd是可选的,您可以将计时器与回调(lpTimerFunc)相关联。

答案 2 :(得分:0)

你真的想要两个窗户吗?您可以在一个窗口中设置两个计时器。您可以使用WM_TIMER处理程序的ID参数(MFC中的OnTimer())来识别触发的计时器。如果你真的不需要高精度定时器,请考虑这种方式。