【发布时间】:2017-01-28 19:28:15
【问题描述】:
我有一个关于 WndProc 的 Timer 过程功能的问题。 如果在定时器调用该函数后 Display_function 还没有完成,如果下一个 TM_TIMER 函数及时调用,但它仍在运行 Display_function,会发生什么?
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static HANDLE hTimer;
switch (iMessage)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case 0:
hTimer = (HANDLE)SetTimer(hWnd, 1, 10, NULL); //10ms
SendMessage(hWnd, WM_TIMER, 1, 0);
break;
....
case WM_TIMER:
switch (wParam)
{
case 1:
Display_function(hWnd);
break;
}
【问题讨论】:
-
每个人似乎都以错误的方式使用SetTimer。 nIDEvent 参数是指针大小是有原因的。设置具有唯一 ID 的指针的安全方法是传递(本地)变量的地址。这样 ID 就不会与另一个计时器 ID 发生冲突。
标签: winapi