Что нового

Для чего служит этот While?

valdur2000

Знающий
Сообщения
155
Репутация
7
Код:
While 1
    Sleep(100)
WEnd


Не раз видел, что некоторые скрипты начинаются с такого цикла While. Зачем?
 

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Это бесконечный цикл.Для того чтобы скрипт работал, пока его не завершил пользователь.А Sleep(100) чтобы не грузить систему
 
Автор
V

valdur2000

Знающий
Сообщения
155
Репутация
7
Т.е. без этого цикла скрипт прошел сверху до низу один раз и закончил рботу, а с этим циклом в начале кода прога зависнет на первом же цикле, пока я ее мануально не закончу? Странно, видел что некоторые скрипты так начинаются... Непонимаю зачем..
Код:
While 1
    Sleep(100)
WEnd
MsgBox (0,"","")

Хотя сделав самый простой код вижу, что MsgBox так и не появился...
 

svigelf

Знающий
Сообщения
61
Репутация
17
Ну например бесконечный цикл используют, если например нужно Указать комбинацию нажатий клавиатуры для вызова функций пользователя (те - "HotKeySet") :

Код:
HotKeySet("{Esc}", "_Exit")
HotKeySet("{NUMPAD0}", "_NUMPAD0")
HotKeySet("{NUMPAD1}", "_NUMPAD1")
HotKeySet("{NUMPAD2}", "_NUMPAD2")
HotKeySet("{NUMPAD3}", "_NUMPAD3")
HotKeySet("{NUMPAD4}", "_NUMPAD4")
HotKeySet("{NUMPAD5}", "_NUMPAD5")
HotKeySet("{NUMPAD6}", "_NUMPAD6")
HotKeySet("{NUMPAD7}", "_NUMPAD7")
HotKeySet("{NUMPAD8}", "_NUMPAD8")
HotKeySet("{NUMPAD9}", "_NUMPAD9")

While 1
	Sleep(100)
WEnd

Func _Exit()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "Escape" на цифровой клавиатуре' & @CRLF & @CRLF & "Выход из программы...", 10)
	Exit
EndFunc

Func _NUMPAD0()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "0" на цифровой клавиатуре')
EndFunc

Func _NUMPAD1()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "1" на цифровой клавиатуре')
EndFunc

Func _NUMPAD2()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "2" на цифровой клавиатуре')
EndFunc

Func _NUMPAD3()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "3" на цифровой клавиатуре')
EndFunc

Func _NUMPAD4()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "4" на цифровой клавиатуре')
EndFunc

Func _NUMPAD5()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "5" на цифровой клавиатуре')
EndFunc

Func _NUMPAD6()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "6" на цифровой клавиатуре')
EndFunc

Func _NUMPAD7()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "7" на цифровой клавиатуре')
EndFunc

Func _NUMPAD8()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "8" на цифровой клавиатуре')
EndFunc

Func _NUMPAD9()
	MsgBox(64, "Нажатие клавиши", 'Вы нажали "9" на цифровой клавиатуре')
EndFunc

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


Добавлено:
Сообщение автоматически объединено:

а также для выполнения определенных действий, до желаемого результата :

Код:
$i = 0
While $i <= 10
    MsgBox(0, "Value of $i is:", $i)
    $i = $i + 1
WEnd

тоесть изначально $i равно нулю, цикл будет по 1 прибавлять к $i, пока $i не станет больше 10, как только $i станет = 10 цикл закончит свою работу (а в этом примере и сам скрипт закроется)
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Не такой уж он бесконечный.
While 1 - пока истина, - выполнять.
Sleep(100)
WEnd
Тут - бесконечный.

While $var333<10
Sleep(100)
WEnd
Тут, выполняется до тех пор
пока переменная $var333 меньше 10

Тут цикл завершается, если наша переменная равна семерке
While $var333<10
Sleep(100)
If $var333 = 7 Then
MsgBox(64, "111", "Выход")
ExitLoop
EndIf
WEnd

И т.д. Sleep нужен. Без него - 100% нагрузка на процессор.
 
Автор
V

valdur2000

Знающий
Сообщения
155
Репутация
7
svigelf
Первый пример вообще отлично показывает применение подобного бесконечного цикла. А какой язык наиболее близок к AutoIt? Просто по AutoIt кроме справки на разных языках, да в ней к каждой функции по одному примеру, более ничего не найти. Разбирать, обучаясь кода других программеров можно, но реально трудоемко. Вот ваш первый пример с циклом While, уверен ну не найдешь нигде. До этого надо либо самому додуматься, а это далеко не каждому новичку под силу, либо знать из другого языка, по которому уже написано много популярных учебников с множеством примеров по каждой функции. Какой язык наиболее близок?
 

svigelf

Знающий
Сообщения
61
Репутация
17
valdur2000
ну первый пример из той же справки :smile: просто я его написал на скорую руку.
А вообще какой близок, да все они похожи, главное я думаю понять смысл, как это работает вот и все.
Я сам в основном пользуюсь форумом, смотрю, как используют в своих скриптах разные функции... (так и учусь).

А вообще я думаю, что в справке описанно все, что нужно знать, все остальное это накручиваешь сам...

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
И никто не упомянул о применений в GUI:

Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Test Script", 300, 200)

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd


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