jedd999 Posted June 4, 2013 Share Posted June 4, 2013 I have a bit of an interesting situation, and I am wondering if there is a way to resolve my problem. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $exitbutton Exit Case $startbutton Run_Setup() Case $stopbutton ;_Func_2() Case $clearbutton ClearAll() EndSwitch WEnd Func Run_Setup() If GuiCtrlRead($Box1)=1 Then Function1() If GuiCtrlRead($Box2)=1 Then Function2() If GuiCtrlRead($Box3)=1 Then Function3() ... EndFunc Where Function1, Function2, Function3 are just a bunch of GUI commands. Sometimes within those functions something will go wrong (i.e. a WinWaitActive command may be incorrect). This causes the program to get stuck at that point, and I have to right click on the task bar and terminate the function (because the GUI doesnt have control). I want to add a "STOP" button to my gui that will terminate whatever is running and just restore my GUI to the original state. Is there a way to do that? Note: I have read http://www.autoitscript.com/wiki/Interrupting_a_running_function and it seems that will only be useful when my main function is in a loop and checking on each iteration the value of $fInterrupt... Any other suggestions? Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted June 4, 2013 Moderators Share Posted June 4, 2013 Hi, jedd999. You state your functions are "just a bunch of GUI commands". What kind of commands, and what error checking are you doing? For example, if you're using a call to GUICtrlSetData, to enter data - are you then doing a check to ensure this happened? If I am missing what you're trying to do, perhaps some code showing some of the commands in your function would help. "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
BinaryBrother Posted June 4, 2013 Share Posted June 4, 2013 The way that you are trying to solve this issue doesn't appear to be the most direct. Most blocking AutoIt functions have a timeout parameter or an alternative, non-blocking, way of achieving the same results. What you appear to need, is more knowledge about how these methods work and what the difference between non-blocking and blocking methods are. Take WinWaitActive, for example. It has a third, and optional, parameter that defines the "timeout". The timeout is the length of time in which the function will wait for a result, after this time has passed the function will then return, maybe even empty handed. If you use this timeout parameter, then the method will return regardless of success, allowing the smooth operation of your script. Given that WinWaitActive is your issue, of course. Ultimately, I don't believe you're going to find a standard method for interrupting a native AutoIt function, while its in the middle of something. SIGNATURE_0X800007D NOT FOUND Link to comment Share on other sites More sharing options...
jedd999 Posted July 24, 2013 Author Share Posted July 24, 2013 I managed to resolve the problem by setting an interrupt (that was attached to a button) and just exiting the script with an adlib function if the button is pressed (at any time) Not an elegant solution, but it works... Link to comment Share on other sites More sharing options...
BinaryBrother Posted July 24, 2013 Share Posted July 24, 2013 You're going to need a full blown spray down with dirty routines like that! Only kidding. Glad you figured it out. SIGNATURE_0X800007D NOT FOUND Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now