Показать полную графическую версию : [решено] Прогресс бар. Параллельное выполнение двух функций
Всем привет!
Подскажите, можно ли сделать так чтобы скрипт продолжал выполнять свою работу, и параллельно шёл прогресс бар, потому-что у меня получается что либо сначала скрипт всё делает, а патом показывает прогресс, либо наиборот, сначала прогресс, затем выполнение.
Вот код самого прогресс бара.
ProgressOn("Настройки рабочего стола", "Настраиваю рабочий стол", "Пожалуйста, подождите...")
For $i = 0 To 100
ProgressSet($i)
Sleep(120)
Next
ProgressSet(100, "Готово!")
Sleep(750)
ProgressOff()
Я тут ещё узнал что в autoit нельзя запускать параллельно 2 цикла. Может в таком случае стоит разделить цикл прогресс бара?
Ну допустим он выполняется до 10%, запускается одно задание, патом выполняется прогресс бар 10%-20%, дальше выполняется второе задание и так далее до 100. Можно такое сделать? Если да, то подскажите как сделать паузу в прогресс баре.
Предупреждение за нарушение правил форума, пункт 2.7 (http://forum.oszone.net/rules.html#2.7) и пункт 3.19 (http://forum.oszone.net/rules.html#3.19):
2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе (http://forum.oszone.net/faq.php?faq=vb_read_and_post#faq_thread) и Правилах форумов.
3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread) и напишите об этом в теме.
Переименуйте пожалуйста тему (Как переименовать свою тему? (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread)).
Проще сделать второй скрипт показывающий прогресс-бар и запускать его
Creat0R, Надеюсь я учел все Ваши замечания.
ferget, Огромное спасибо, как всегда, четкий совет. И как я сразу не додумался сделать что-то такое.
В результате сделал так:
Разделил все задачи скрипта, раскидал их по функциям. В цикл прогресс бара вставил несколько дополнительных условий и расставил там функции. Теперь получается что при выполнении цикла прогресс бара он поочерёдно вызывает задания, и за одно показывает какая функция выполняется в данный момент.
Почему вот такая конструкция
For $i = 0 to 100
sleep(100)
If ($i<25) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Сбор Информации")
ElseIf (25<$i<30) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Настройка фона")
ElseIf (30<$i<50) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Настройка значков")
ElseIf(50<$i<100) Then
ProgressSet( $i, "Подождите " & $i & "%" & @CRLF & "Завершение настройки")
EndIf
Next
Выводит текст "Сбор Информаци"и, патом переключается на "Настройка фона" и на этом застревает (хотя прогресс продолжает идти), а патом сразу выводит Завершение настройки. Как сделать чтобы Настройка значков не пропускалась?
Пришлось разделить ProgressOn("Настройка рабочего стола", "Сбор необходимых данных")
For $i = 0 to 100
sleep(100)
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Сбор Информации")
Next
ProgressSet(100 , "Настройка рабочего стола", "Настраиваем")
For $i = 0 to 100
sleep(100)
If ($i<25) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Настройка фона")
ElseIf (25<$i<50) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Настройка значков")
ElseIf(50<$i<100) Then
ProgressSet( $i, "Подождите " & $i & "%" & @CRLF & "Завершение настройки")
EndIf
Next
ProgressSet(100 , "Подождите", "Завершение настройки")
sleep(750)
ProgressOff()
Может у кого-нибудь есть предложения по-лучше?
For $i = 0 to 100
sleep(100)
If ($i<=25) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Сбор Информации")
ElseIf (25<$i and $i<=30) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Настройка фона")
ElseIf (30<$i and $i<=50) Then
ProgressSet( $i, "Выполнено " & $i & "%" & @CRLF & "Настройка значков")
ElseIf(50<$i and $i<=100) Then
ProgressSet( $i, "Подождите " & $i & "%" & @CRLF & "Завершение настройки")
EndIf
Next
madmasles
20-04-2012, 17:12
Я бы так сделал.$sText = 'Сбор необходимых данных'
ProgressOn('Настройка рабочего стола', $sText, '0%')
Sleep(2000)
For $i = 0 To 100
Sleep(200)
Switch $i
Case 0 To 19
$sText = 'Сбор Информации'
Case 20 To 39
$sText = 'Настройка фона'
Case 40 To 69
$sText = 'Настройка значков'
Case Else
$sText = 'Завершение настройки'
EndSwitch
ProgressSet($i, 'Подождите ' & $i & '%' & @CRLF & $sText)
Next
Sleep(2000)
ProgressOff()
ТОЧНО! БЛИН! Я даже не подумал применить здесь кейс, только придётся чуть-чуть ещё подправить.
madmasles
20-04-2012, 17:49
McLotos,
Посмотрите еще пример к функции _GUICtrlStatusBar_EmbedControl() (http://autoit-script.ru/autoit3_docs/libfunctions/_guictrlstatusbar_embedcontrol.htm)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.