Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как прекратить выполнение функции не ожидая пока она завершится.

Ответить
Настройки темы
[решено] Как прекратить выполнение функции не ожидая пока она завершится.

Пользователь


Сообщения: 143
Благодарности: 24

Профиль | Отправить PM | Цитировать


Что у меня имеется:
Код: Выделить весь код
;#include "GUIFinder.au3"
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>

Opt("GUIOnEventMode", 1)

Global $iStop = false, $ch_name = true

$hGUI = GUICreate("",250,165,300,300, $WS_SYSMENU,BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))

GUICtrlCreateGroup("Win.info", 2, 2, 240, 65)
;$hFinder = GUICtrlCreateFinder(10, 20)
$hParInp_label = GUICtrlCreateLabel("Win.Handle:", 60, 20, 100, 20)
$hHwndInp_label = GUICtrlCreateLabel("Contro.Handle:", 60, 40, 100, 20)
$hHwndInp = GUICtrlCreateInput("", 132, 20, 100, 18)
;$hClassInp = GUICtrlCreateInput("", 40, 62, 100, 20)
$hParInp = GUICtrlCreateInput("", 132, 40, 100, 18)
;$hTitleInp = GUICtrlCreateInput("", 40, 106, 100, 20)

GUICtrlCreateGroup("Изменение параметра:", 2, 70, 188, 70)
$move_from_label 	= GUICtrlCreateLabel("От: ", 10, 90, 15, 20)
$move_to_label 		= GUICtrlCreateLabel("До: ", 65, 90, 18, 20)
$move_step_label 	= GUICtrlCreateLabel("Шаг: ", 122, 90, 22, 20)
$move_sleep_label 	= GUICtrlCreateLabel("Задержка: ", 10, 115, 60, 20)
$move_sleep_label_sec 	= GUICtrlCreateLabel("сек.", 105, 115, 20, 20)
$move_from_Input 	= GUICtrlCreateInput("1", 27, 88, 30, 18)
$move_to_Input 		= GUICtrlCreateInput("10", 85, 88, 30, 18)
$move_step_Input 	= GUICtrlCreateInput("1", 147, 88, 30, 18)
$move_sleep_Input 	= GUICtrlCreateInput("1", 70, 113, 30, 18)

$butt_start = GUICtrlCreateButton("СТАРТ", 190, 75, 50, 40)

GUICtrlSetOnEvent($butt_start, "_Main_Events")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Main_Events")

GUISetState()





While 1
    Sleep(10)
	;If $FINDER_OPEN And (String($FINDER_HWND) <> GUICtrlRead($hHwndInp)) Then
     ;   GUICtrlSetData($hHwndInp, $FINDER_HWND)
      ;  GUICtrlSetData($hParInp, $FINDER_PARENT)
    ;EndIf
WEnd

Func _Main_Events()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            Exit
        Case $butt_start
			If $ch_name Then
				GUICtrlSetData($butt_start,"СТОП")
				_calc() ;надо запустить
				$ch_name = False
			Else
				GUICtrlSetData($butt_start,"СТАРТ")
				$ch_name = True
			EndIf
    EndSwitch
EndFunc

Func _calc()
	ConsoleWrite("Старт"&@LF)
	Local $from = GUICtrlRead($move_from_Input)
	Local $to 	= GUICtrlRead($move_to_Input)
	Local $step = GUICtrlRead($move_step_Input)
	Local $wait = GUICtrlRead($move_sleep_Input)
	Local $plus = false
	;Local $res 	= $from
	Local $starttime = _Timer_Init()

	while 1
		If _Timer_Diff($starttime)/1000 >= $wait Then
			If 	Not $plus then
				$res = $from
				$plus = True
			Else
				$res = $res + $step
				if  $res >= $to then
					$res = $to
					ConsoleWrite("Время: " &  _Timer_Diff($starttime)/1000&@LF)
					ConsoleWrite("стоп " & $res &" = "& $to&@LF)
					;_Timer_KillTimer($hGUI,
					ExitLoop
				EndIf
			EndIf
		ConsoleWrite("Время: " &  _Timer_Diff($starttime)/1000&@LF)
		ConsoleWrite("Результат: " & $res&@LF)
		$starttime = _Timer_Init()
		EndIf
	WEnd
EndFunc
Как сделать чтобы по первому нажатию $butt_start запускался _calc(), а по второму нажатию _calc() прекращал свое действие?
Видел тут вот похожую тему, но как к себе ее прикруть не понимаю.

Отправлено: 20:05, 07-05-2010

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Несколько вариантов:

1) Отключение режима событии...
Код: Выделить весь код
...

Opt("GUIOnEventMode", 1)

Global $iStop = False, $ch_name = False

....

Func _Main_Events()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            Exit
        Case $butt_start
            $ch_name = Not $ch_name

            If $ch_name Then
                GUICtrlSetData($butt_start,"СТОП")
                _calc() ;надо запустить
            Else
                GUICtrlSetData($butt_start,"СТАРТ")
            EndIf
    EndSwitch
EndFunc

Func _calc()
    ConsoleWrite("Старт"&@LF)

    ...

    Opt("GUIOnEventMode", 0)

    While 1
        Switch GUIGetMsg()
            Case $butt_start
                $ch_name = False
                GUICtrlSetData($butt_start, "СТАРТ")

                ExitLoop
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch

        ...
    WEnd

    Opt("GUIOnEventMode", 1)
EndFunc
2) Проверка и запуск функции в цикле:
Код: Выделить весь код
...

Global $ch_name = False

...

While 1
    Sleep(10)

    If $ch_name Then
        _calc() ;надо запустить
    EndIf
WEnd

Func _Main_Events()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            Exit
        Case $butt_start
            $ch_name = Not $ch_name

            If $ch_name Then
                GUICtrlSetData($butt_start, "СТОП")
            ElseIf GUICtrlRead($butt_start) <> "СТАРТ" Then
                GUICtrlSetData($butt_start, "СТАРТ")
            EndIf
    EndSwitch
EndFunc

...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:56, 07-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как прекратить выполнение функции не ожидая пока она завершится.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как свернуть выполнение bat(cmd) файла? Centrinar AutoIt 5 29-09-2011 15:16
[решено] Как приостановить выполнения скрипта пока не будет нажата кнопка malev AutoIt 2 14-11-2009 20:05
Соринка в объективе, как она могла появиться и как избавиться от неё? Цицерон Цифровое изображение 7 11-04-2009 20:39
Как остановить скрипт, пока юзер не закроет всплывающее окно? Gamover jr Вебмастеру 5 16-04-2008 20:08
Конфигурация компа, как она Вам? kaEwituS Выбор отдельных компонентов компьютера и конфигурации в целом 20 19-06-2007 18:03




 
Переход