Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: И снова Процент выполнения DLL Добавлено: 24.03.04 13:11  

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

Studen правилно поднял тему. У меня аналогичная сит-ция.

Вкратце суть: есть гигантский массив строк и нужно найти строку отвечаюшую каким-то требованиям.

На басике Do... While длится несколько минут. На PB неск. секунд.

Все хорошо, все замечательно. НО. Пока DLLка не закончит цикл, прога на VB "замерзает" наглухо.

Первое что сделал в цикле PB внедрил

SetWindowText Hwnd(где Hwnd Text1.wnd на форме VB) , [счетик выполнения]"

ноль эмоций, возвращает [счетик выполнения], только после завершения.

Потом добавил к этой байде ...DOEVENTS - заработало!

Программа стала перетаскиваться мышкой в момент выполнения, в Text1 виден ход

работы. Но, блин, скорость выполнения упала в несколько раз, т.е. стала как

у басика.

Гуру кодерных наук, может кто подскажет, че делать то. А иначе отпадает

нужда в PB.

P.S.

То что CyRax предлагал - вводить дополнительную внешнюю функцию и одну глобальную переменную - в итоге все тоже самое. Пока DLLка занимается своим циклом "прошу меня не беспокоить".

Ответить

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

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



Вопросов: 84
Ответов: 453
 Профиль | | #1 Добавлено: 25.03.04 15:44

Можно вынести твой цикл в отдельный поток, в PB есть функция для создания

потоков, по моему Create Thread, посмотри в хелпе. Она как раз и создана для

таких ситуаций как у тебя, примеры поищи на форуме

http://powerbasic.com/support/forums/Ultimate.cgi

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #2 Добавлено: 25.03.04 20:49

Если правильно понял, то при каждом проходе цикла выводится информация в текстбокс. Можно это дело значительно ускорить, если выводить информацию не в каждом проходе, а например один раз в 100 проходов цикла, например:

IF loopCounter MOD 100 = 0 THEN
                    'вывод информации
END IF

Ну и соответственно, если делаешь вывод ещё реже, то работает ещё быстрее.

Не видел кода, поэтому наугад: если делаешь массиву REDIM, то можно тоже не каждый раз, а один раз на N проходов. Тоже ускоряет

Ответить

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



Вопросов: 3
Ответов: 1
 Профиль | | #3 Добавлено: 26.03.04 09:07

Ай, да, Alex! Ай, да, молодца!

Спасибо за подсказку. Получилось все, что хотел. И индикация процесса и скорость

выполнения несоизмерима с VB. Использовал THREAD CREATE ...

Одна и таже задача на VB - 56 сек, на PV - 3,5 сек!

Ответить

Номер ответа: 4
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #4
Добавлено: 28.03.04 04:53

Уже можно "беспокоить"?

Если у тебя не получилось что то из предложенного мной, то это исключительно из за твоей лени (или некорректно поставленного вопроса). Можешь скачать с моего сайта прогу сравнения скоростей PB и VB (ту что для VB можешь не качать). Там есть пример потока.

Ответить

Страница: 1 |

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



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