Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Прогресс бар. Параллельное выполнение двух функций (http://forum.oszone.net/showthread.php?t=233161)

McLotos 19-04-2012 14:42 1902516

Прогресс бар. Параллельное выполнение двух функций
 
Всем привет!
Подскажите, можно ли сделать так чтобы скрипт продолжал выполнять свою работу, и параллельно шёл прогресс бар, потому-что у меня получается что либо сначала скрипт всё делает, а патом показывает прогресс, либо наиборот, сначала прогресс, затем выполнение.
Вот код самого прогресс бара.
PHP код:

ProgressOn("Настройки рабочего стола""Настраиваю рабочий стол""Пожалуйста, подождите...")
For 
$i 0 To 100
ProgressSet
($i)
Sleep(120)
Next
ProgressSet
(100"Готово!")
Sleep(750)
ProgressOff() 


Я тут ещё узнал что в autoit нельзя запускать параллельно 2 цикла. Может в таком случае стоит разделить цикл прогресс бара?
Ну допустим он выполняется до 10%, запускается одно задание, патом выполняется прогресс бар 10%-20%, дальше выполняется второе задание и так далее до 100. Можно такое сделать? Если да, то подскажите как сделать паузу в прогресс баре.

Creat0R 19-04-2012 14:48 1902521

Предупреждение за нарушение правил форума, пункт 2.7 и пункт 3.19:

Цитата:

2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный и напишите об этом в теме.
Переименуйте пожалуйста тему (Как переименовать свою тему?).

ferget 19-04-2012 19:20 1902705

Проще сделать второй скрипт показывающий прогресс-бар и запускать его

McLotos 20-04-2012 06:38 1902924

Creat0R, Надеюсь я учел все Ваши замечания.
ferget, Огромное спасибо, как всегда, четкий совет. И как я сразу не додумался сделать что-то такое.

В результате сделал так:
Разделил все задачи скрипта, раскидал их по функциям. В цикл прогресс бара вставил несколько дополнительных условий и расставил там функции. Теперь получается что при выполнении цикла прогресс бара он поочерёдно вызывает задания, и за одно показывает какая функция выполняется в данный момент.

McLotos 20-04-2012 15:12 1903197

Почему вот такая конструкция
PHP код:

For $i 0 to 100
    sleep
(100)
    If (
$i<25Then
                ProgressSet
$i"Выполнено " $i "%" & @CRLF "Сбор Информации")
    ElseIf (
25<$i<30Then
                ProgressSet
$i"Выполнено " $i "%" & @CRLF "Настройка фона")  
    ElseIf (
30<$i<50Then
                ProgressSet
$i"Выполнено " $i "%" & @CRLF "Настройка значков")
   ElseIf(
50<$i<100Then
                ProgressSet
$i"Подождите " $i "%" & @CRLF "Завершение настройки")
     EndIf
Next 

Выводит текст "Сбор Информаци"и, патом переключается на "Настройка фона" и на этом застревает (хотя прогресс продолжает идти), а патом сразу выводит Завершение настройки. Как сделать чтобы Настройка значков не пропускалась?

McLotos 20-04-2012 15:40 1903222

Пришлось разделить
PHP код:

ProgressOn("Настройка рабочего стола""Сбор необходимых данных")
For 
$i 0 to 100
    sleep
(100)
    
ProgressSet$i"Выполнено " $i "%" & @CRLF "Сбор Информации")
 
Next 
ProgressSet
(100 "Настройка рабочего стола""Настраиваем")
For 
$i 0 to 100
    sleep
(100)
    If (
$i<25Then
    ProgressSet
$i"Выполнено " $i "%" & @CRLF "Настройка фона")  
    ElseIf (
25<$i<50Then
   ProgressSet
$i"Выполнено " $i "%" & @CRLF "Настройка значков")
   ElseIf(
50<$i<100Then
   ProgressSet
$i"Подождите " $i "%" & @CRLF "Завершение настройки")
     EndIf
Next
ProgressSet
(100 "Подождите""Завершение настройки")
sleep(750)
ProgressOff() 

Может у кого-нибудь есть предложения по-лучше?

ferget 20-04-2012 16:44 1903274

Код:

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 1903295

Я бы так сделал.
Код:

$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()


McLotos 20-04-2012 17:22 1903304

ТОЧНО! БЛИН! Я даже не подумал применить здесь кейс, только придётся чуть-чуть ещё подправить.

madmasles 20-04-2012 17:49 1903325

McLotos,
Посмотрите еще пример к функции _GUICtrlStatusBar_EmbedControl()


Время: 15:57.

Время: 15:57.
© OSzone.net 2001-