Что нового

Выйти из цикла по кнопке

Fanatmb

Новичок
Сообщения
51
Репутация
0
Доброго дня.

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

Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <ButtonConstants.au3>
#include <TreeViewConstants.au3>
#include <GUIComboBox.au3>

Global $chk=0

_Main()
Exit

Func Logging(ByRef $idTEXT,$whinfo)
   
    local $cTime = @YEAR & "-" & @MON & "-" & @MDAY &"   " & @HOUR & ":" & @MIN & ":" & @SEC &"   "
    local $editBefore = GuiCtrlRead($idTEXT)
    GUICtrlSetData($idTEXT, $cTime&" "&$whinfo&@CRLF&$editBefore& " ")
    ;$editBefore=""
   
EndFunc


Func Request(ByRef $idTEXT)
       
    $whinfo = "Есть инфа!"
    local $cTime = @YEAR & "-" & @MON & "-" & @MDAY &"   " & @HOUR & ":" & @MIN & ":" & @SEC &"   "
    local $editBefore = GuiCtrlRead($idTEXT)
    GUICtrlSetData($idTEXT, $cTime&" "&$whinfo&@CRLF&$editBefore& " ")
    Sleep(3000)
     
EndFunc

Func _Main()

    Local $idInput_Date, $idInput_Time, $iMsg
    Local $idTEXT, $Combo1, $sList
    Local $nCh1, $nCh2, $nCh3, $nCh4, $nCh5, $nCh6, $msg
    Local $whinfo
    #forceref $idInput_Date, $idInput_Time

    GUICreate("Мониторинг", 500, 339, (@DesktopWidth - 500) / 2, (@DesktopHeight - 339) / 2, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_POPUP + $WS_EX_TOOLWINDOW)
    Opt("GUIResizeMode",802)
   
    Local $hWnd = WinGetHandle("[ACTIVE]")
    WinSetOnTop($hWnd, "", 1)

    GUICtrlCreateLabel("Что ищем?", 10, 12, 60, 20)

    $Combo1 = GUICtrlCreateCombo("", 70, 10, 100, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
    GUICtrlSetData(-1, $sList , "") ; добавляет другие пункты и устанавливает новый по умолчанию
    GUICtrlSendMsg(-1, $CB_SETDROPPEDWIDTH, 370, 0) ; Ширина выпадающего списка
   
    $nCh1 = GUICtrlCreateCheckbox("Зима", 180, 10, 60, 20)
    $nCh2 = GUICtrlCreateCheckbox("Лето", 280, 10, 60, 20)


    Local $iOKButton = GUICtrlCreateButton("Старт", 380, 8, 60)


    ;GUICtrlCreateLabel("Время", 10, 240, 150, 20)
    ;$idInput_Time = GUICtrlCreateInput(""& @MON & "-" & @MDAY & "-" & @YEAR &"   " & @HOUR & ":" & @MIN & ":" & @SEC, 180, 240, 280, 20)
    $idTEXT = GUICtrlCreateEdit("", 30, 50, 420, 300, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
    GUICtrlSetTip(-1, "Мониторинг")
   

    GUISetState(@SW_SHOW)
   
    While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case $GUI_EVENT_CLOSE
          Exit 
    Case $iOKButton
        if $chk = 0 Then
        GUICtrlSetData($iOKButton,"Стоп")
        $whinfo  = "Пошёл процесс!"
        Logging($idTEXT,$whinfo)
        $chk = 1
        Sleep(2000)
        While 1
            Request($idTEXT) ; вот тут запускается функция опроса данных и из неё надо как-то выйти
        WEnd

        else
        GUICtrlSetData($iOKButton,"Старт")
        $i=0
        $whinfo ="Мониторинг остановлен"
        Logging($idTEXT,$whinfo)
        $chk = 0
               ;MsgBox(4096, "Сообщение", "Мониторинг запущен",3)
       
        EndIf
        Case Else
    EndSwitch
    WEnd

EndFunc   ;==>_Main


Вот только после запуска Request в цикле не получается остановить эту задачу, да и принципе получается только "убив" процесс. Нужно иметь возможность остановить процесс, поставить требуемые галочки, из списка выбрать запросы (его пока нет, да и речь не о нём), и опять его запустить.
 
Последнее редактирование:

Prog

Продвинутый
Сообщения
598
Репутация
77
Нужно переписать код под OnEvent или не блокировать цикл опроса событий.
 
Верх