使用 Windows API 设置计时器有哪些不同的方法。每种方法的优缺点是什么?
我正在使用 MS DevStudio 的 C++。
最佳答案
Windows系统上有两个与定时器相关的函数:SetTimer和KillTimer(我知道,名字很奇怪——CreateTimer和DestroyTimer会更明智,就像CreateWindow和DestroyWindow一样,但这就是可用的)。
SetTimer 可以以两种模式之一运行:计时器事件可以触发用户定义的回调,也可以将消息发布到窗口。该函数的格式为:
timer_id = SetTimer (window, event_id, interval, callback);
使用回调:
timer_id = SetTimer (NULL, NULL, interval_in_milliseconds, callback);
要向窗口获取 WM_TIMER 消息:
timer_id = SetTimer (window, event_id, interval_in_milliseconds, NULL);
在这两种情况下,调用线程都需要有一个消息队列,因为两种变体都会发出 WM_TIMER 消息,默认处理程序会调用回调函数。
根据您使用的操作系统,间隔值有上限和下限。 See the API documentation了解更多详情。
要在完成计时器后释放计时器,如果您提供了窗口句柄,请执行以下操作:
KillTimer (window, event_id); // event_id is important!
如果您使用了回调:
KillTimer (NULL, timer_id);
单个窗口可以有多个与其关联的计时器,为每个计时器使用不同的 event_id。重用 event_id 会停止计时器的第一个实例,而不发布 WM_TIMER 消息。
优点:相当容易使用。 缺点:间隔结束和处理 WM_TIMER 消息之间的延迟,分辨率较大,需要消息处理循环。
关于visual-studio - 如何在 Windows 中使用计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/772343/