为什么该windows应用程序关闭后占据大量CPU?该如何处理

为什么该windows应用程序关闭后占据大量CPU?
#include <windows.h>
LRESULT   CALLBACK   WndProc(HWND,UINT,WPARAM,LPARAM);
int   WINAPI   WinMain(HINSTANCE   hInstance,HINSTANCE   hPreInstance,LPSTR   lpCmdLine,int   nShowCmd)
{
static   TCHAR   szAppName[]= "HelloWin ";
HWND   hwnd;
MSG   msg;
WNDCLASS   wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL, "Register   Class   Error ",szAppName,MB_ICONERROR);
return   0;
}
hwnd=CreateWindow(szAppName,
                "The   Hello   Program ",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
::ShowWindow(hwnd,nShowCmd);
::UpdateWindow(hwnd);
while(::GetMessage(&msg,hwnd,0,0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return   msg.wParam;
}
LRESULT   CALLBACK   WndProc(HWND   hwnd,UINT   message,WPARAM   wParam,LPARAM   lParam)
{
HDC   hdc;
PAINTSTRUCT   ps;
RECT   rect;
switch(message)
{
case   WM_CREATE:

return   0;
case   WM_PAINT:
hdc=::BeginPaint(hwnd,&ps);
::GetClientRect(hwnd,&rect);
::DrawText(hdc, "hello   windows ",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
::EndPaint(hwnd,&ps);
return   0;
case   WM_DESTROY:
::PostQuitMessage(0);
return   0;
}
return(::DefWindowProc(hwnd,message,wParam,lParam));
}

------解决方案--------------------
原因嘛,就是因为 PostQuitMessage 发送的消息本质上并不是窗口(尽管是以WM_开头),它是针对UI线程的,将WM_QUIT消息放入线程消息队列,是消息循环可以结束,程序可以退出,不针对具体窗口,因此这个消息根本就没有具体的 hWnd这一参数,你可以调试下,看程序退出之前, msg结构里 hwnd字段的值。

所以调用 GetMessage 给它制定 hWnd作消息筛选,必然无法接受到最后的 WM_QUIT