Autor Tema: Timeout con las api de wininet  (Leído 4414 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Timeout con las api de wininet
« en: Julio 31, 2011, 11:25:35 pm »
Holas!
No busque a fondo, pero no pude encontrar la forma de establecer el timeout (tiempo limite) de respuesta a 10 segundos de la API InternetCheckConnection. Ya que si no estas conectado a internet te avisa pero como a los 40 segundos y es mucho para esperar xD
No me digan que voy a tener que usar sockets solo para eso en un form?

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Timeout con las api de wininet
« Respuesta #1 en: Julio 31, 2011, 11:52:02 pm »
Hola Raul338 creo que se puede hacer con InternetSetOption

Código: [Seleccionar]
Private Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal dwOption As Long, ByRef lpBuffer As Any, ByVal dwBufferLength As Long) As Long

Private Const INTERNET_OPTION_SEND_TIMEOUT As Long = 5
Private Const INTERNET_OPTION_FROM_CACHE_TIMEOUT As Long = 63
Private Const INTERNET_OPTION_DISCONNECTED_TIMEOUT As Long = 49
Private Const INTERNET_OPTION_DATA_RECEIVE_TIMEOUT As Long = 8
Private Const INTERNET_OPTION_DATA_SEND_TIMEOUT As Long = 7
Private Const INTERNET_OPTION_CONNECT_TIMEOUT As Long = 2
Private Const INTERNET_OPTION_RECEIVE_TIMEOUT As Long = 6
Private Const INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT As Long = INTERNET_OPTION_RECEIVE_TIMEOUT
Private Const INTERNET_OPTION_CONTROL_SEND_TIMEOUT As Long = INTERNET_OPTION_SEND_TIMEOUT

hora me fijo bien cual puede ser.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Timeout con las api de wininet
« Respuesta #2 en: Agosto 01, 2011, 12:27:54 am »
mmm no, no hace nada :/

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Timeout con las api de wininet
« Respuesta #3 en: Agosto 01, 2011, 06:33:30 am »
Saludos !!!

Raul338, el detalle con la API InternetCheckConnection, te sirve para determinar si la conexión con Internet puede ser establecida.
Ahora que tal si pruebas con las API's QueryPerformanceCounter y QueryPerformanceFrequency, con las cuales puedes obtener el tiempo de ejecución de un proceso. Quizás pudiera servirte (eso espero, sino disculpa "la burrada" :D).
Ahora, con estas funciones hay que tener, digamoslo así como "un cierto cuidado", ya que pueden tener tendencia a consumir mucho de los recursos (en especial del procesador) :o.

Espero haberte podido ayudar en algo.


Manuel F. Borrego S. 8)
Barcelona, Edo. Anzoátegui. Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Timeout con las api de wininet
« Respuesta #4 en: Agosto 01, 2011, 10:53:44 am »
ADONAIRAFA Las api QueryPerformance sirven para medir el tiempo que tardo en hacer algo. Yo necesito poner un limite de tiempo distinto al default :P pero gracias igual por la ayuda. Lo del consumo del procesador, lo dejo a criterio del cliente xDDDD

Por ahora se me ocurre atarlo con alambres usar timers  :o ;D

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Timeout con las api de wininet
« Respuesta #5 en: Agosto 09, 2011, 02:45:59 pm »
Código: (vb) [Seleccionar]
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal dwOption As Long, ByRef lpBuffer As Any, ByVal dwBufferLength As Long) As Long

Private Const INTERNET_OPTION_CONNECT_TIMEOUT As Long = 2

Private Const IF_NO_CACHE_WRITE = &H4000000

Private Function GetHTML(sURL As String, Optional ByVal lngTimeout As Long = 4500) As String
    Dim sBuffer         As String * 1000
    Dim lInternet       As Long
    Dim lFile           As Long
    Dim lRead           As Long
   
    lInternet = InternetOpen(0, 1, vbNullString, vbNullString, 0)
    If lInternet <> 0 Then
        Call InternetSetOption(lInternet, INTERNET_OPTION_CONNECT_TIMEOUT, lngTimeout, 4)
        lFile = InternetOpenUrl(lInternet, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
        If lFile <> 0 Then
            Do
                Call InternetReadFile(lFile, sBuffer, 1000, lRead): DoEvents
                GetHTML = GetHTML & Left$(sBuffer, lRead)
            Loop While lRead <> 0
        End If
        Call InternetCloseHandle(lInternet)
    End If
End Function
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion