程序占用CPU资源的问题
我写了一个程序用于生成一个窗口,程序执行以前CPU的占用率为13%左右,执行后就达到100%了!不会吧!我只是生成了一个简单的窗体而已,程序如下
;###############################################################
.386
.model flat, stdcall
option casemap:none
;############################################################
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
;###############################################################
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
;###############################################################
.data
ClassName db 'MyWndClass',0
AppName db 'NewWindow',0
char WPARAM 20H
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hdc HDC ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
invoke ExitProcess, eax
;##########################################################################
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL
mov hwnd, eax
invoke ShowWindow, hwnd, CmdShow
invoke UpdateWindow, hwnd
invoke GetDC, hwnd
mov hdc, eax
FMessage:
invoke GetMessage, addr msg, NULL, 0, 0
cmp eax, 0
jz EndMessage
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp FMessage
EndMessage:
mov eax, msg.wParam
ret
WinMain endp
;########################################################################
WndProc proc hwnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL BitBmp:HBITMAP
.IF uMsg==WM_DESTROY
invoke PostQuitMessage, NULL
.ELSEIF uMsg==WM_CHAR
push wParam
pop char
invoke SendMessage, hwnd, WM_PAINT, 0, 0
.ELSEIF uMsg==WM_PAINT
invoke LoadBitmap, NULL, OBM_COMBO
mov BitBmp, eax
invoke BitBlt, hdc, 50, 50, 32, 32, BitBmp, 0, 0, SRCCOPY
invoke TextOut, hdc, 0, 0,addr char, 1
.ELSE
invoke DefWindowProc, hwnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax, eax
ret
WndProc endp
end start
大侠们告诉我一下原因啊,谢谢