Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Незаметное выполнение кода Добавлено: 21.02.07 21:51  

Автор вопроса:  ZoomerSD | ICQ: 148640473 
Добрый всем вечер.. В моей программе есть процедуры, которые отнимают значительное время на их выполнение. Естественно Программаво время их выполнения "подвисает" и некоторые пользователи считаю что она полностью зависла. Как можно сделать так чтобы несмотря на выполнение кода программа могла реагировать на действия пользователя, а не находиться в прострации?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 21.02.07 22:01
DoEvents


Очень полезный оператор. Использую его рядом с самым затруднительным участком кода. Можно даже внутри цикла.

Он поддерживает обработку других процессов во время затруднения в твоем

Ответить

Номер ответа: 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
Проблема решается путем создания нового потока, никак не влияющего на работу первого.

да поможет тебе
Declare Function CreateThread Lib "kernel32.dll" ( _
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-сайт: sharpc.livejournal.com
 Профиль | | #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 имеется солидный :))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам