Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как сделать, что бы функция не тормозила?


Автор: dima_mak 23.11.2004, 20:03
Вот у меня есть функция:
Код

Private Function OpenURL(ByVal sUrl As String) As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
Dim i As Integer
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
DoEvents
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
For i = 0 To 100
DoEvents
Next i
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
OpenURL = sBuffer
End Function


когда я вызываю эту функцию у меня прога подвисает до окончания выполнения функции.(Хотя я добавил
Код

For i = 0 To 100
DoEvents
Next i

это не очень помогло.)
Что можно ещё сделать, так что бы я мог хотябы на кнопки в проге нажимать во время выполнения функции?

Автор: cardinal 23.11.2004, 22:41
Код

Private Function OpenURL(ByVal sUrl As String) As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
Dim i As Integer
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
DoEvents
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
DoEvents
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
OpenURL = sBuffer
End Function

Автор: dima_mak 23.11.2004, 22:58
а какая разница? я же тоже самое сделал.............

Автор: cardinal 24.11.2004, 01:47
Ты DoEvents в цикле делал, а он нафиг не нужен...

Автор: dima_mak 24.11.2004, 08:13
Полюбе тормозит. Нету ничего другого, что можно сделать?

Автор: boevik 24.11.2004, 08:15
dima_mak, или читай меньше байт за один раз или используй асинхроную функцию InternetReadFileEx.

Автор: dima_mak 24.11.2004, 08:35
smile (и желательно к обоим случаям) smile

Автор: boevik 24.11.2004, 08:38
dima_mak, ты знаешь на какой функции у тебя тормазит?
Если на InternetReadFile, то возьми sReadBuffer поменьше, к примеру 512 байт.

Автор: dima_mak 24.11.2004, 08:45
Цитата(boevik @ 24.11.2004, 08:38)
dima_mak, ты знаешь на какой функции у тебя тормазит?
Если на InternetReadFile, то возьми sReadBuffer поменьше, к примеру 512 байт.

Если честно сказать, то не совсем знаю.
Попробую буфер поменять...........
Добавлено @ 08:48
А что ты там говорил про InternetReadFileEx, что это такое и куда её вснуть?
Добавлено @ 08:50
P.S Попробывал буфер ихменить, но это не очень помогло.

Автор: boevik 24.11.2004, 08:57
Для начало, неплохо бы выяснить, какая именно функция тебя тормазит.
И не плохо бы всё переделать на асинхронную работу.
Как, я не знаю.
Я использую контроль Microsoft Internet Control с методом Execute, он выполняется асинхронно и нет ни каких тормазов.

Автор: dima_mak 24.11.2004, 08:59
Ок. Спасибо. Может кто то ещё подскажет.............

Автор: dima_mak 24.11.2004, 15:41
Что то я не врубаюсь....... Что такое Microsoft Internet Control это WebBrowser. Если да то у него нет Execute.

З.Ы. Врубился. Пробую.......

Автор: boevik 24.11.2004, 15:52
Цитата(dima_mak @ 24.11.2004, 15:41)
Что то я не врубаюсь....... Что такое Microsoft Internet Control это WebBrowser. Если да то у него нет Execute.

З.Ы. Врубился. Пробую.......

Извини обманул.
Смотри Microsoft Iternet Transfer Control

Автор: dima_mak 24.11.2004, 15:53
Вопрос отпал. Сделал через Microsoft Internet Control. Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)