On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Пост N: 90
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 19.08.11 00:22. Заголовок: [Пример] Загрузка файла из интернета


Здравствуйте !
Написал тут небольшую программку для скачивания файла из интернета.
Она использует мультипоточность и работу с сокетами.

Программа лежит здесь (компилировать download.prg или запустить download.exe)

Пришлось модифицировать библиотеку tsocket.prg
Я добавил в неё метод ReceiveCustom(число получаемых байт):
Скрытый текст

Он помогает получить заданное число байт из сокета.
Я использовал его так как ReceiveChar() получает только один символ, что совсем недостаточно, ReceiveLine() подходит только для линий, а с бинарной датой это не подходит, и ReceiveString() получает весь текст, без возможности обработать определенный фрагмент.

Картинка программы:




Был бы рад, если бы мой метод библиотеки добавили в новую версию MiniGUI, ну и также сам пример, конечно. Комментарии на русском, могу, если надо, перевести на английский


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 9 [только новые]


moderator




Пост N: 241
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.11 10:13. Заголовок: SkyNET пишет: Был б..


SkyNET пишет:

 цитата:
Был бы рад, если бы мой метод библиотеки добавили в новую версию MiniGUI


Большое спасибо!
Так и сделаю, чтобы и другим разработчикам была польза.
SkyNET пишет:

 цитата:
могу, если надо, перевести на английский


Да, это также желательно сделать.
Жду с нетерпением...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 91
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 19.08.11 20:19. Заголовок: Завершил полный пере..


Завершил полный перевод, включая комментарии.
Теперь есть две версии:
русская и английская

Вот архив с английской версией.
Заранее спасибо

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 242
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.08.11 21:15. Заголовок: SkyNET пишет: Вот а..


SkyNET пишет:

 цитата:
Вот архив с английской версией.


Большое спасибо за авторский перевод!

Замечание: для правильной работы примера пришлось сделать небольшое изменение в коде tsocket.prg (новый метод ReceiveCustom):

 цитата:
METHOD ReceiveCustom(nBufLen) CLASS TSocket
local cRet := ""
local cBuf := space(nBufLen)
local nRet

::PrintDebugMessage("Receive custom string, len: " + STR(nBufLen))

nRet := SocketReceive( ::m_hSocket, @cBuf, ::nReceiveTimeout )
cRet := substr( cBuf, 1, nRet ) // изменил здесь на 1

::PrintDebugMessage( "Received " +cRet )

Return cRet



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 92
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 27.08.11 21:15. Заголовок: Я случайно выложил с..


Я случайно выложил старую версию библиотеки, которая не работала, извините.
Поправил код во всех версиях на сайте.

P.S: Извините за долгий ответ, были проблемы с интернетом...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 93
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 01.09.11 15:55. Заголовок: Обновился до новой в..


Обновился до новой версии MiniGUI ((Build 98) - 2011.07.27).
Если заменяю стандартную библиотеку tsocket на свою, то ничего не работает, падает с ошибкой.
В чём проблема ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 94
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 31.10.11 23:03. Заголовок: Всем привет ! У меня..


Всем привет !
У меня возникла новая проблема - на медленном модеме не всегда приходит ответ от сервера.
Причём никакой ошибки не возникает, поток просто ничего не делает.
Поэтому вопрос:
Как остановить и/или завершить поток (можно даже через другой) через определенный промежуток времени ? Например 60 секунд. В документации по Harbour нет никакого упоминания о них, а функции из xHarbour не работают.
Версия MiniGui 2.0.2

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 100
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 27.03.13 22:41. Заголовок: Обновил Downloader, ..


Обновил Downloader, добавил в него проверку на наличие ошибок при загрузке файла
Теперь, если HTTP статус ответа сервера не 200, то загрузки файла не происходит.
Новые исходники здесь.

Спасибо: 1 
ПрофильЦитата Ответить
moderator




Пост N: 457
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.03.13 15:12. Заголовок: SkyNET пишет: Обнов..


SkyNET пишет:

 цитата:
Обновил Downloader


Большое спасибо! Это обновление, конечно, будет включено в следующую сборку

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3024
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.10.13 18:00. Заголовок: Как получить результ..


Как получить результат работы потока ?
Т.е. я в потоке после выполнения задачи (публичной переменной присваиваю T или F).
Как мне её получить после выполнения потока, а то она у меня всегда F, т.е. как дождаться в основной программе окончания потока ?

Вот на этом примере:
// On Click of Button "Download file"
PROCEDURE ButtonMain
LOCAL threadA
PUBLIC lRezultat := .F.

Win_1.Button_2.Enabled := .F.
Win_1.Button_2.Caption := "Loading..."

// Start a new Thread
threadA := hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @DownloadFile() )
hb_threadDetach( threadA )

MsgInfo(M->lRezultat) // Т.е. переменная не дожидается окончания потока !

RETURN



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 18
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет