Как оживить не отвечающую программу? (скачивание файлов)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sol
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 23.04.2006 (Вс) 11:32
Откуда: Москва

Как оживить не отвечающую программу? (скачивание файлов)

Сообщение Sol » 17.05.2006 (Ср) 0:03

Применил в программе API URLDownloadToFileA из Lib "urlmon" в цикле.

Функция работает, НО на это время окно программы "замерзает" - белеет и делается недоступным. Можно ли сделать так, чтобы окно подавало признаки жизни (ну полоска там ползла бы, можно было бы остановить процесс) ?
- Внимание, Земля, говорит борт 13, у нас отказал бортовой компьютер, что делать?
- Борт 13, борт 13, это диспетчер, слышите меня? Играйте пока на резервном, играйте на резервном.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.05.2006 (Ср) 0:13

Вставь в цикл DoEvents.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Sol
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 23.04.2006 (Вс) 11:32
Откуда: Москва

Сообщение Sol » 17.05.2006 (Ср) 0:24

Не помогло: окно "замерзает" во время выполнения API, т.е. скачивания файла, а DoEvents "оживляет" окно только в перерывах между обращениями к ней.
- Внимание, Земля, говорит борт 13, у нас отказал бортовой компьютер, что делать?
- Борт 13, борт 13, это диспетчер, слышите меня? Играйте пока на резервном, играйте на резервном.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.05.2006 (Ср) 0:34

А, тогда есть два выхода: отдельный поток или смириться.

Первое VB не поддерживает. Советую перенести код цикла в Native DLL на PowerBASIC, там есть поддержка многопоточности.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Sol
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 23.04.2006 (Вс) 11:32
Откуда: Москва

Сообщение Sol » 17.05.2006 (Ср) 0:37

С PowerBasic'ом мне пока сталкиваться не приходилось :(
А где про него можно почитать?
- Внимание, Земля, говорит борт 13, у нас отказал бортовой компьютер, что делать?
- Борт 13, борт 13, это диспетчер, слышите меня? Играйте пока на резервном, играйте на резервном.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.05.2006 (Ср) 0:46

const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Sol
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 23.04.2006 (Вс) 11:32
Откуда: Москва

Сообщение Sol » 17.05.2006 (Ср) 0:47

Спасибо!
- Внимание, Земля, говорит борт 13, у нас отказал бортовой компьютер, что делать?
- Борт 13, борт 13, это диспетчер, слышите меня? Играйте пока на резервном, играйте на резервном.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.05.2006 (Ср) 3:09

Нда...

Sol
Строго рекомендуется пользоваться поиском. Поверь, вопрос, который ты задал, слишком неоригинален и многочислен.

BV
Сходи в Кирпичи и посмотри лежащую там качалку.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.05.2006 (Ср) 3:37

Хм, да, забыл :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Sol
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 23.04.2006 (Вс) 11:32
Откуда: Москва

Сообщение Sol » 17.05.2006 (Ср) 8:49

GSerq
Поверь, вопрос, который ты задал, слишком неоригинален и многочислен.


Да не только в качалке дело. Вопрос касался именно поведения окна.
В поиске не нашел.
Последний раз редактировалось Sol 17.05.2006 (Ср) 8:56, всего редактировалось 1 раз.
- Внимание, Земля, говорит борт 13, у нас отказал бортовой компьютер, что делать?
- Борт 13, борт 13, это диспетчер, слышите меня? Играйте пока на резервном, играйте на резервном.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.05.2006 (Ср) 8:55

Не верю!
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.05.2006 (Ср) 11:35

BV писал(а):http://ru.wikipedia.org/wiki/PowerBASIC

Этот опус оттуда ещё не стёрли? :o

Что касается многопоточности в VB6, то я специально по этому поводу накатал пост.
Изображение

Sol
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 23.04.2006 (Вс) 11:32
Откуда: Москва

Сообщение Sol » 17.05.2006 (Ср) 12:05

Да, всё как всегда на самом деле сложнее чем кажется (с) Murphy

Но если не так, то -

tyomitch,
в вашей качалке из "кирпичей" используется та же самая функция
URLDownloadToFileA. а где же ключ к тому, что программа реагирует на события?

Кстати, почему эта (а также другие API) нигде не объявлены в тексте???
- Внимание, Земля, говорит борт 13, у нас отказал бортовой компьютер, что делать?
- Борт 13, борт 13, это диспетчер, слышите меня? Играйте пока на резервном, играйте на резервном.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.05.2006 (Ср) 12:09

Sol, магия ;-)
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.05.2006 (Ср) 16:01

Sol писал(а):в вашей качалке из "кирпичей" используется та же самая функция
URLDownloadToFileA. а где же ключ к тому, что программа реагирует на события?

Кстати, почему эта (а также другие API) нигде не объявлены в тексте???


Всё из-за TLB...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.05.2006 (Ср) 18:11

BV писал(а):
Sol писал(а):в вашей качалке из "кирпичей" используется та же самая функция
URLDownloadToFileA. а где же ключ к тому, что программа реагирует на события?

Кстати, почему эта (а также другие API) нигде не объявлены в тексте???


Всё из-за TLB...

Угу. Я же сразу написал в том посте:

Я писал(а):Такие трюки, однако, требуют большого геморроя c хитрым API, который непременно нужно объявлять в TLB -- иначе магия не сработает.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 115

    TopList