:: Архив конференции по VFP до 2005 года
Прогресс останавливает выполнение проги
Yason

Сообщений: 214
Откуда: Питер
Дата регистрации: 03.07.2002
Добрый день всем!

решил наконец вмеcто анимированных картинок воспользоваться прогресс-баром ( стандартный класс _therm.vсx
в 8-м ;) )
Запускаю его как показано в samples:

LOCAL loTherm, lcTask, lnPercent, lnSeconds, nDurValue
loTherm = NewObject("_thermometer","_therm","","пошел" )
lcTask = " копифайл "
nDurValue = 90

WITH loTherm
.Show()
FOR i = 1 TO nDurValue
lnPercent = m.i/durvalue*100
.Update(lnPercent, lcTask)
lnSeconds = SECONDS()
DO WHILE lnSeconds+1>SECONDS()
ENDDO
ENDFOR
.Complete()
ENDWITH

затем идут долгие copy files...

nDurValue определил в секундах опытным путем ;)

предназначен прогрессбар для развлечения юзера в помент копирования файлов ;)
Он жмет кнопку, куда вставлен указанный выше код и созерцает ;)

Код отрабатывает, бар закрывается - и только после этого начинается копирование.

Подскажите, коллеги - как "запараллелить " эти процессы?
Заранее благодарю.
Ratings: 0 negative/0 positive
Re: Прогресс останавливает выполнение проги
Aries

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
Фокс не многопоточен. Сначала сделает одно и только потом другое.
Пока у тебя выполняется код для програссбара, ты ничего сделать не сможешь.

Есть вариант развести потоки. Но это на любителя.
Поройся, в решениях есть "Нестандартный прогресбар" там это реализовано.




------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive
Re: Прогресс останавливает выполнение проги
Yason

Сообщений: 214
Откуда: Питер
Дата регистрации: 03.07.2002
Спасибо!

Это подходит ;)
Ratings: 0 negative/0 positive
Re: Прогресс останавливает выполнение проги
Петров Андрей

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Ниче не понял. Вы ждете пока отрисуется прогресс бар чтоли? Могу скинуть класс на основе закрашеных прямоугольников (чистый VFP) говорите ему SetPercent и он все отрисовывает...

А если ждете когда скопируются файлы тогда не путайте названием темы...

Но все равно не понятно зачем вы ждете этого. Есть другие способы...




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Прогресс останавливает выполнение проги
Vadim

Сообщений: 816
Откуда: Клайпеда
Дата регистрации: 26.10.2000
Yason
предназначен прогрессбар для развлечения юзера в помент копирования файлов
Если именно файлОВ а не файлА, то и "стандартный" вполне подходит, если его дёргать при смене файла
Вот пример простого упаковщика вижуальных библиотек:
LOCAL lcDir
lcDir = GETDIR()
IF !EMPTY(m.lcDir) AND MESSAGEBOX("Are You Sure You Want To Preceed?",1+32) = 1
CLOSE DATA ALL
LOCAL lcLibs,lnTables,loTherm,i
lcLibs = m.lcDir + "*.vcx"
ADIR(aTables,m.lcLibs)
lnTables = ALEN(aTables,1)
loTherm = NEWOBJECT("_thermometer",HOME(1) + "FFC\_therm",.NULL.,"Please wait...",m.lnTables)
loTherm.Show()
FOR m.i = 1 TO m.lnTables
loTherm.Update(m.i,"Table: " + aTables[m.i,1])
SELECT 0
USE (m.lcDir + aTables[m.i,1]) EXCLUSIVE
PACK
USE
ENDFOR
loTherm.Update(m.i,"")
??CHR(7)
loTherm.Complete()
ENDIF
p.s. Код не защищенный, исполнять на свежезапущенном фоксе




------------------
Ratings: 0 negative/0 positive
Re: Прогресс останавливает выполнение проги
Aries

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
Что Андрюша, запутали тебя да? ;)
Фишка в том что Yason хочет сделать один общий програсбар на вес цикл работы.
Не сильно заморачиваясь при этом, т.е вычисления кол файлов, размер. ADIR() конечно же помог бы
в этом, да просто таким способом гораздо проще. В включили прогресбар, а в конце выключили.
Но к сожалению в одном потоке этого сделать нельзя, фокс то однопоточен. Поэтому
есть вариант развести потоки.




------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive
Re: Прогресс останавливает выполнение проги
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, Yason!

Цитата:
WITH loTherm
.Show()
FOR i = 1 TO nDurValue
lnPercent = m.i/durvalue*100
.Update(lnPercent, lcTask)
lnSeconds = SECONDS()
DO WHILE lnSeconds+1>SECONDS()
ENDDO
ENDFOR
.Complete()
ENDWITH

затем идут долгие copy files...
А надо не "затем" а "внутри" - т.е. в собственно цикле FOR. Как ты это там
сделаешь - уже твои вопросы - возможно лучше загнать имена копируемых файлов
в массив/курсор и внутри цикла брать из этого массива/курсора.
И искусственную задержку с DO WHILE убери.




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 12 (Гостей: 12)

© 2000-2024 Fox Club 
Яндекс.Метрика