multiple ::setTimer in c++

multiple ::setTimer in c++

本文关键字:c++ in setTimer multiple      更新时间:2023-10-16

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


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

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

每个hWnd都有自己的事件ID列表吗?它们是独立处理的吗?我不想讨论这个设计是否合理。。

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

计时器标识符nIDEvent为特定于关联窗口。另一个窗口可以有自己的计时器其具有与另一个窗口拥有的计时器。这个计时器是不同的。

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

考虑使用不同的EventID,并向我们提供更多信息,说明为什么您认为以这种方式进行操作是必要的。如果随机窗口只是为了让定时器消息注册到它们,那么你很可能不想创建它们。这听起来像是一个混乱的破解,会产生不必要的计算和低效的开销。

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

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