Jump to content

Closing active Loop Help


Recommended Posts

Helloi guys.

This is my code.

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>



Local $hGUI = GUICreate("Example", 250, 250)
Local $Iamaretardos = GUICtrlCreateButton ("Yes",50,50)

GUISetState(@SW_SHOW)

While (1)
   Melba23 ()
WEnd

Func Melba23 ()
   Sleep (10)
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Iamaretardos
         $Data = GUICtrlRead ($Iamaretardos)
         If $Data = "Yes" Then
         GUICtrlSetData ($Iamaretardos, "No")
      ElseIf $Data = "No" Then
         GUICtrlSetData ($Iamaretardos, "Yes")
         Sleep(50000)
      EndIf
   EndSwitch
EndFunc

 

My probleme is here :

ElseIf $Data = "No" Then
         GUICtrlSetData ($Iamaretardos, "Yes")
         Sleep(50000)

How to "exit" the sleep if i dont want to remove it ? Or doing somthing at same time.

As requested by someone i tryed to watch the tutorial but since i dont got the same syntax i cant get a correct logic can someone help me please ?

My video tutorials : ( In construction )  || My Discord : https://discord.gg/S9AnwHw

How to Ask Help ||  UIAutomation From Junkew || WebDriver From Danp2 || And Water's UDFs in the Quote

Spoiler

 Water's UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Link to comment
Share on other sites

You can't exit the sleep, you'd need to use a timer (TimerInit and TimerDiff) to create a pause function that can be broken into.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Make your own Sleep function:

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>


Opt('GUICloseOnESC', 1;1 = (default) Send() the $GUI_EVENT_CLOSE message when ESC is pressed. 
Local $hGUI = GUICreate("Example", 250, 250)
Local $Iamaretardos = GUICtrlCreateButton ("Yes",50,50)

GUISetState(@SW_SHOW)

While (1)
   Melba23 ()
WEnd

Func Melba23 ()
   Sleep (10)
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Iamaretardos
         $Data = GUICtrlRead ($Iamaretardos)
         If $Data = "Yes" Then
         GUICtrlSetData ($Iamaretardos, "No")
      ElseIf $Data = "No" Then
         GUICtrlSetData ($Iamaretardos, "Yes")
         _MySleep(50000)
      EndIf
   EndSwitch
EndFunc

Func _MySleep($iTimeOut)
    Local $tdStart=TimerInit(), $iTimerDiff
    Do
        Sleep(10)
        if GUIGetMsg() = $GUI_EVENT_CLOSE Then ExitLoop
        $iTimerDiff=TimerDiff($tdStart)
    Until  $iTimerDiff > $iTimeOut
EndFunc

 

Link to comment
Share on other sites

  • Moderators

caramen,

Or use a Windows message hander like this:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $fInterrupt = False

Local $hGUI = GUICreate("Example", 250, 250)
Local $cButton = GUICtrlCreateButton("Yes", 50, 50)

GUISetState(@SW_SHOW)

GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $cButton
            Switch GUICtrlRead($cButton)
                Case "Yes"
                    GUICtrlSetData($cButton, "No")
                    _Running()
                Case "No"
                    GUICtrlSetData($cButton, "Yes")
            EndSwitch
    EndSwitch
WEnd

Func _Running()

    ConsoleWrite("Running"  & @CRLF) ; Now we are here we can no longer read the main loop

    ; Here we run our loop checking every second if the flag has been set in the handler
    $nBegin = TimerInit()
    Do
        Sleep(1000)

        ; Here we look for the flag set in the handler
        If $fInterrupt = True Then
            ConsoleWrite("Interrupted" & @CRLF)
            ; Reset the flag
            $fInterrupt = False
            ; And return early
            Return
        EndIf
        ConsoleWrite("Still running!" & @CRLF)

    Until TimerDiff($nBegin) > 50000

    ; Now the loop has finished naturally

EndFunc   ;==>_Running

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)

    ; The button was pressed
    If BitAND($wParam, 0x0000FFFF) = $cButton Then
        Switch GUICtrlRead($cButton)
            ; We only want to react if the function is already running
            Case "No"
                ; Set the flag
                $fInterrupt = True
        EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG

EndFunc   ;==>_WM_COMMAND

Lots of ways to skin this particular cat.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...