2013-02-25 7 views
1

나는이 작은 응용 프로그램을 MASM으로 작성하여 활성 인터넷 연결을 확인하고 거기에 신호음을 보내면 내 문제는 루프가 CPU의 99 %를 사용한다는 것이며 루프 내에서 절전을 시도한 것입니다 하지만 어떻게 든 작동하지 않습니다?루프, 100 % CPU 사용량, 수면 사용이 작동하지 않습니까?

;build as a WINDOWS app 

     .XCREF 
     .NOLIST 
     INCLUDE \masm32\include\masm32rt.inc 
     INCLUDE \masm32\include\wininet.inc 
     INCLUDELIB \masm32\lib\wininet.lib 
     .LIST 

;------------------------------------------------------------------------- 

IsOnline PROTO :LPSTR 
Sleep PROTO STDCALL :DWORD 

;------------------------------------------------------------------------- 

IFNDEF FLAG_ICC_FORCE_CONNECTION 
FLAG_ICC_FORCE_CONNECTION EQU 1 
ENDIF 

;------------------------------------------------------------------------- 

     .CODE 

IsOnline PROC lpszURL:LPSTR 

;Test Internet Connection 
; 
;lpszURL points to a zero-terminated test URL string (must start with "http://") 
; 
;Returns EAX = FALSE if not connected 
;   = TRUE if connected 
;  EDX = connection description (see InternetGetConnectedState documentation) 

     push eax 
     mov  edx,esp 
     INVOKE InternetGetConnectedState,edx,0 
     or  eax,eax 
     jz  IsOnl0 

     INVOKE InternetCheckConnection,lpszURL,FLAG_ICC_FORCE_CONNECTION,0 

IsOnl0: pop  edx 
     ret 

IsOnline ENDP 

;------------------------------------------------------------------------- 

szURL db 'http://www.google.com',0 

;------------------------------------------------------------------------- 

_main PROC 

loop00: INVOKE IsOnline,offset szURL 
     Invoke Sleep,5000 
     or  eax,eax 
     jz  loop00 

     INVOKE Beep,750,1000 
     exit 

_main ENDP 

;------------------------------------------------------------------------- 

     END  _main 
+1

높은 CPU로드가 홀수입니다. 또한,'Sleep()'은'eax'를 버립니다. 올바른 장소에 놓았습니까? –

+0

내 논리에 따라 코드에서 루프가 연결될 때 (연결 확인) 5 초 동안 작동하고 인터넷 연결이 설정 될 때까지 다시 실행해야합니다. 기본적으로 나는 잠을 자고, 어떤 이유로 든 기능이 멈춘다. –

+0

오, 오케이, 수면은 실제 수표보다 먼저 와야합니다. :) –

답변

2

Sleep() 레지스터 쓰레기 수 등 IsOnline()의 반환 값이 손실 될 수 있습니다 :

는 코드입니다.