例如,假设我有以下TimerProc
:
#include <Windows.h>
#define IDT_TIMER1 1001
BOOL g_fKillTimer = FALSE;
VOID DoTimerTask(); // Among other things, sets the flag `g_fKillTimer` when needed
// Timer is started elsewhere with a call to:
// SetTimer(hWnd, IDT_TIMER1, 10000, TimerProc);
VOID CALLBACK TimerProc(
_In_ HWND hWnd,
_In_ UINT uMsg,
_In_ UINT_PTR idEvent,
_In_ DWORD dwTime
)
{
if (TRUE == g_fKillTimer)
{
KillTimer(hWnd, IDT_TIMER1);
g_fKillTimer = FALSE;
}
DoTimerTask();
}
这段代码是否会成功地终止定时器IDT_TIMER1
?或者我在定时器过程本身中调用KillTimer
的事实可能会带来问题?函数DoTimerTask()
仍然会被调用吗?
1条答案
按热度按时间vxf3dgd41#
这段代码是否会成功终止计时器
IDT_TIMER1
?是的。
我在计时器过程本身中调用
KillTimer
这一事实是否会带来问题?不可以。在定时器回调中调用
KillTimer
是完全安全的。函数
DoTimerTask()
还会被调用吗?是的,因为你在再次调用
DoTimerTask()
之前没有从回调中调用return
,例如: