我正在进行winapi编程,而且我通常遇到与WM_TIMER msg相关的问题:例如,当我调用WM_TIMER msg时激活的函数,例如Update()函数时,仍会调用此函数即使我杀了计时器。现在的主要问题是,当我相信我删除了包含Update()函数的类时,这个类仍然调用Update()函数,即使我先杀了计时器和这个类,因此,我得到内存错误,因为此Update()函数处理在先前删除函数中已删除的属性。某些任务完成后是否有任何解决方案可以调用WM_TIMER?
答案 0 :(得分:1)
WM_TIMER
消息实际上是一个标志 - 当某个计时器到期时,如果消息队列为空并且调用WM_TIMER
,则该标志设置为生成单个GetMessage
事件。
这可以避免使用许多WM_TIMER
消息阻塞系统并将多个过期的计时器折叠为一个,但缺点是在所有其他消息(WM_TIMER
被处理后)传递WM_PAINT
消息同样)。
所以你看到的是你已经杀死的计时器已经过去并且设置了标志,但是在你的程序空闲之前不会传递消息。
你想留一个标记来记住你是否真的在等待计时器事件。
在并行多个计时器的应用程序中,您需要保留一个活动计时器列表,并使用Windows计时器机制来安排下一个计时器,并在处理程序中调用其截止日期为的所有子处理程序。过去。