Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Подскажите что сделать Добавлено: 12.02.04 14:53  

Автор вопроса:  Valera

В цикле есть вложенный цикл и при работе программа подвисает.

Подскажите что сделать что бы все было тип-топ...

Ответить

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

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 12.02.04 16:01
Поставь где-нть внутри цикла вызов Application.DoEvents.

Ответить

Номер ответа: 2
Автор ответа:
 Valera



Вопросов: 15
Ответов: 43
 Профиль | | #2 Добавлено: 12.02.04 16:37

а нельзя пару слов - поподробней

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 13.02.04 01:29
Лучше запускай в отдельном потоке. Если конечно он поддерживается в VB.NET

Ответить

Номер ответа: 4
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #4
Добавлено: 13.02.04 09:41
CyRax, ты недооцениваешь VB .NET :) Конечно можно, и намного легче,
чем в VB6.
Однако, это может быть довольно гемморойным делом, потому что велика
возможность возникновения ошибок, например, при совместном
использовании ресурсов (даже переменных типа Int32, не говоря уже о
каких-нть мудрых TCPClient или FileStream) несколькими потоками.
А если из этого цикла ещё идёт работа с Windows Forms, то это будет
полный абзац!
В общем, о недостатках многопоточной модели много писал Эплман в книге
"Переход на VB .NET: стратегии, концепции, код". Советую почитать!


Насчёт DoEvents: просто вставь куда-нибудь внутри цикла вызов этого
метода:

Application.DoEvents()

Или в полном варианте:

System.Windows.Forms.Application.DoEvents()

Смысл DoEvents в том, что программа приостанавливает работу
выполняемого кода и обрабатывает переданные окну оконные сообщения :)

Ответить

Номер ответа: 5
Автор ответа:
 Valera



Вопросов: 15
Ответов: 43
 Профиль | | #5 Добавлено: 13.02.04 12:18

Поставил Application.DoEvents(). Прекрасно работает.

Эти циклы форматируют текст(достачно большой), который потом загружается в RichTextBox и тут опять происходит пауза, нельзя ли этот процес как то ускорить!!!???

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 13.02.04 12:48
К сожалению, методов BeginUpdate/EndUpdate, как у ListView, у
RichTextBox нет. Возможно поможет такой трюк: перед добавлением текста
скрыть RichTextBox, а потом опять показать.

Ответить

Номер ответа: 7
Автор ответа:
 Valera



Вопросов: 15
Ответов: 43
 Профиль | | #7 Добавлено: 13.02.04 17:37

Спасибо Павел.

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 14.02.04 01:26

2 Павел.

Ну ладно, ладно - я подкалываю. Но ты тоже съехал по голимому.

В PB например просто Thread Create и имя любой функции указываешь и она будет работать в отдельном потоке. И PB всё равно какие там переменные DWORD, LONG или QUAD(64 битная).

Ответить

Номер ответа: 9
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #9
Добавлено: 14.02.04 09:29
В .NET так же: передаёшь методу Start класса Thread делегат на
функцию, и она запускается в отдельном потоке.
И я сомневаюсь, что PB защищён от проблем синхронизации... Я сам
как-то статью читал о методах синфхронизации в C++... Довольно
труднопонимаемая вещь: всякие WaitForSingleObject,
WaitForMultipleIbjects, SuspendThread и прочая муть. В PB, наверное,
так же... А в .NET всё можно сделать проще, встроенными средставми, но
всё равно попотеть придётся. В общем, почитай Эплмана, он реально эту тему объяснил.

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 15.02.04 03:13

Можно и так и так. В этом и есть прелесть нормальных языков программирования.

       Thread Create Функция(Параметры) To hThread
---

Function Функция(Параметры)

 '...

End Function

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 15.02.04 04:17

PB - это далеко не Си, в отличие от VB.NET.

Его разработчикам удалось совместить API и VB.

Как тебе компилятор для которого родная среда - API, а синтаксис - VB?

У него нет проблем как в VB6. Там когда начинаешь работать с АПИ начинается морока с преобразованием форматов, наладкой параметров, поисками адресов.

А на ПБ ты даже не чувствуешь перерхода между синтаксисом VB, API и ASM. Все они совместимы между собой.

Зря ты не посмотрел мой пример сраврения скорсти PB и VB. Там это чётко видно.

---

 Register Max1 As Dword 'Register можно заменить и на Dim
 Select Case OptionNumber
 Case 3
  Asm MOV EAX, Max1
  Loop1:
  Asm INC i
  Asm CMP EAX,i
  Asm JNE Loop1
 End Select

Посмотри как плано интегрируется переменная Max1 и метка Loop1 с АСМ. Потом ты можешь использовать эти переменные в обычных операциях. Это верно и для API тоже.

Ответить

Страница: 1 |

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



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