2013-02-25 3 views
1

У меня есть это небольшое приложение, написанное в MASM, которое продолжает проверять активное интернет-соединение и отправляет звуковой сигнал, если он есть, теперь моя проблема в том, что в цикле используется 99% процессора, я попытался поставить Сон внутри цикла но почему-то это не работает?Loop, 100% Использование процессора, используя сон не работает?

Это код:

;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

Высокая загрузка ЦП нечетна. Кроме того, 'Sleep()' trashes 'eax'. Вы уверены, что положили его в нужное место? –

+0

В соответствии с моей логикой, где она находится в коде, она должна запустить функцию в цикле (проверьте подключение) в течение 5 секунд и запустить ее до тех пор, пока не будет установлено подключение к Интернету, или? В принципе, я помещаю сон, функция просто перестает работать по какой-то причине. –

+0

Ну ладно, сон должен пройти до фактической проверки, тогда он работает. :) –

ответ

2

Sleep() могут громить регистры и поэтому возвращаемое значение из IsOnline() могут быть потеряны.