Страница: 1 |
Страница: 1 |
Вопрос: Незаметное выполнение кода
Добавлено: 21.02.07 21:51
Автор вопроса: ZoomerSD | ICQ: 148640473
Добрый всем вечер.. В моей программе есть процедуры, которые отнимают значительное время на их выполнение. Естественно Программаво время их выполнения "подвисает" и некоторые пользователи считаю что она полностью зависла. Как можно сделать так чтобы несмотря на выполнение кода программа могла реагировать на действия пользователя, а не находиться в прострации?
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 21.02.07 22:01
Очень полезный оператор. Использую его рядом с самым затруднительным участком кода. Можно даже внутри цикла.
Он поддерживает обработку других процессов во время затруднения в твоем
Номер ответа: 2
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #2
Добавлено: 21.02.07 23:03
сработало но не совсем. я прописал чтобы при запуске процедуры вылетала фора с таймером которая показывает что программа работает. форма появляеться.. но таймер замерает каждый раз при выполнении какого либо длинного куска кода..
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 21.02.07 23:15
Ну это в норм. языках, для этого многопоточность используют, а в вб это ещё один каминь как и с Long * 1000
Номер ответа: 4
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #4
Добавлено: 21.02.07 23:17
Ну ты определи какой кусок кода самый затруднительный и перед ним поставь DoEvents. Вообще
универсальный метод, я думаю, трудно найти. Так или иначе - система будет тормозить
Номер ответа: 5
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #5
Добавлено: 22.02.07 00:10
проблема потоков для VB красивее всего решена в
Tread Factory
http://www.halfx.com/
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 22.02.07 11:35
Потоки проще разруливать самому, а не полагаться на какие-то левые библы. Иначе потом хрен прогу отладишь...
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 22.02.07 13:00
Проблема решается путем создания нового потока, никак не влияющего на работу первого.
да поможет тебе
ByRef lpThreadAttributes As SECURITY_ATTRIBUTES, _
ByVal dwStackSize As Long, _
ByRef lpStartAddress As Long, _
ByRef lpParameter As Any, _
ByVal dwCreationFlags As Long, _
ByRef lpThreadId As Long) As Long
Номер ответа: 8
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #8
Добавлено: 22.02.07 14:59
Через CreateThread проблема не решается. Частично может прокатить при компиляции в P-Code, но сам по себе способ ламерский.
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 22.02.07 16:45
LamerOnLine, когда мы дождемся от тебя обстоятельной статьи о многопоточности в VB6 с красивыми кодами, кучей дизассемблерных листингов и окнами GPF?
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 22.02.07 16:53
Не уверен, но кажется что никогда )
Номер ответа: 11
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #11
Добавлено: 22.02.07 17:47
http://bbs.vbstreets.ru/viewtopic.php?t=25514 ?
Номер ответа: 12
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #12
Добавлено: 22.02.07 19:19
Бойан...
Тут все несколько серьезнее. Даже не используя глобальные переменные тема не прокатит. Поскольку VB6, в отличие от VB5, использует локальный Err объект, использующих локальный TLS - отсюда и гемор с TLB и невозможностью Err-хэндлеров.
Уже писал сто раз - вместо извратов с тредовыми АПИ НАМНОГО проще заюзать вместо Standard ActiveX.exe, но не в режиме COM-сервера, а как Standalone. Свободные потоки безопасно реализовать на VB клинически трудно, но разделенные через ActiveX.exe - проще простого. Статью писать не буду, но на вопросы могу че-нить подсказать - ибо опыт в разработки мультитредовых приложений VB имеется солидный )