Что нового

[Интеракция] Работоспособность GUI при паузе в функции

forfrends

Новичок
Сообщения
176
Репутация
3
Всем добрый день!
Нужен ваш совет. Допустим, есть окно GUI в котором есть кнопка $Button1, при нажатии вызывается пользовательская функция Example() которая кроме основного кода имеет задержку в 10 секунд (или любой другой промежуток времени, вплоть до нескольких часов). Если программу написать так как приведено в примере ниже, то окно программы перестанет отвечать на любые запросы, так как стоит включиться паузе функции и цикл While 1....WEnd будет недоступным, а соответственно и все управляющие элементы (кнопки, чек-боксы и т.д.) даже закрыть не получится! Что можете посоветовать для решения этой проблемы? Как сделать паузу в выполнении функции и при этом что бы окно программы осталось активным?

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 172, 77, 196, 128)
$Label1 = GUICtrlCreateLabel("Label1", 24, 8, 36, 17)
$Button1 = GUICtrlCreateButton("Button1", 16, 40, 59, 25, $WS_GROUP)
$Label2 = GUICtrlCreateLabel("Label2", 96, 8, 36, 17)
$Button2 = GUICtrlCreateButton("Button2", 88, 40, 59, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			Example()
		Case $Button2
			; какой - либо код         
	EndSwitch
WEnd

Func Example()
	; какой - либо код
	Sleep(10000)
	; какой - либо код
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
forfrends [?]
Что можете посоветовать
Либо прерывать работу функции и возвращаться в главный цикл, либо вставлять вместо Sleep дополнительную обработку
Код:
GUIGetMsg()
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
InnI сказал(а):
...либо вставлять вместо Sleep дополнительную обработку
Код:
GUIGetMsg()
О чем то таком сам подумывал. Прочитал эту тему http://autoit-script.ru/index.php/topic,13661.0.html. Похоже что нужно либо полностью избавляться от пауз, либо вставлять
Код:
GUIGetMsg()
(как вы и писали), либо переписать код и использовать таймеры, либо придумывать что-то еще.
Тема закрыта.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Можно ещё обрабатывать сообщения элементов. Вот здесь посмотрите обработку WM_COMMAND для кнопки. Но это уже крайние случаи.
 
Верх