Opened 15 years ago
Closed 15 years ago
#1944 closed Bug (No Bug)
AdlibUnRegister not working trusty
| Reported by: | Devol | Owned by: | |
|---|---|---|---|
| Milestone: | Component: | AutoIt | |
| Version: | 3.3.6.1 | Severity: | None |
| Keywords: | Cc: |
Description
Hello,
Here an example:
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
Global $Label, $iPos = 0 , $sleep = 10
$Form1 = GUICreate("Adlibtest - Sleep("&$sleep&")", 240, 100, 990, 30)
GUISetOnEvent(-3, "_Exit")
$Label = GUICtrlCreateLabel("Testlabel", 25, 14, 300, 16)
GUICtrlSetFont(-1, 11, 800, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Start",15,50,60,40)
GUICtrlSetOnEvent(-1,"_startadlib")
$Button2 = GUICtrlCreateButton("Stop",120,50,60,40)
GUICtrlSetOnEvent(-1,"_stopadlib")
GUISetState(@SW_SHOW)
While Sleep($sleep) ; the higher the sleep , the more often the labelswitch fails
WEnd
Func _startadlib()
GUICtrlSetData($Label,"Running")
AdlibRegister("_Laufschrift")
EndFunc
Func _stopadlib()
AdlibUnRegister("_Laufschrift")
GUICtrlSetData($Label,"Stopped") ; labelswitch failing sometimes
EndFunc
Func _Exit()
Exit
EndFunc
Func _Laufschrift()
GUICtrlSetData($Label, StringMid("Running", $iPos) & " " & "Running")
$iPos += 1.8
If $iPos > StringLen("Running") Then $iPos = 0
EndFunc
I tested this script on several pcs but the behavoir is always the same.
AdlibUnRegister
sometimes
fails and the subsequent command is not being executed.
You can try the examplescript , just click the buttons "Start" and "Stop" by turns.(wait 1-2 secs. before clicking stop)
Sooner or later the label will be stopped on "Running Running Running" despite of the GuictrlsetData($Label,"Stopped").
Bug or not? :)
Greetz Devol
PS: I talked to the german forum before opening this ticket.
Attachments (0)
Change History (11)
follow-up: 2 comment:1 by , 15 years ago
comment:2 by , 15 years ago
Replying to BrewManNH:
It's working for me, every time I hit Stop, it changes the label to Stopped. I even put the sleep at 1 second and still no issues with it.
Sorry i had problems with the edit-function , the sleep doesn`t really matter , use 50ms to try , the error really exists(tested with some user in the german forum before) , the problem is that it appears randomly.
comment:3 by , 15 years ago
- Random: General ratio might be helpful here. (1:2, 1:10, etc)
- System: Some system data on the PC's you have encountered this problem. (like "Environment(Language:0413 Keyboard:00000409 OS:WIN_XP/Service Pack 3 CPU:X86 OS:X86)"( SciTE4AutoIT3,scriptmode)
PS: I talked to the german forum before opening this ticket.
- Link: So it seems ... http://www.autoit.de/index.php?page=Thread&threadID=27479
follow-up: 5 comment:4 by , 15 years ago
O yea ... your reporting on 3.3.6.1. If you can, see if the current latest beta 3.3.7.x(you fill in the x) is also giving you the same problem/error.
comment:5 by , 15 years ago
Replying to mvg:
O yea ... your reporting on 3.3.6.1. If you can, see if the current latest beta 3.3.7.x(you fill in the x) is also giving you the same problem/error.
So , the error also appears in beta v3.3.7.8, tested on Win7 Prof. SP1 x64 , WinXP Prof. SP2/3 x86.
comment:8 by , 15 years ago
From my point of view there is no bug but just a race condition.
When the AdlibUnRegister is requested the previous execution can be just beginning. No way to stop it but the GUICtrlSetData($Label,"Stopped") will be overwrite with the end of execution of _Laufschrift()
some global variable can be set to reflect that we want to stop or ad a slight delay before executing GUICtrlSetData($Label,"Stopped") that will force the execution of the previous Adlib.
Remember AutoIt is not multithreaded so Adlib is executing between statements
Func _stopadlib()
AdlibUnRegister("_Laufschrift")
Sleep(500)
GUICtrlSetData($Label,"Stopped") ; labelswitch failing sometimes
EndFunc
follow-up: 10 comment:9 by , 15 years ago
Sorry , but the Sleep doesn`t solve the problem(just tried it).
AdlibUnregister should stop a registered function to be executed, right?
So what if it`s important that an function really needs to be stopped?
In my opinion it`s a bug, sry..
comment:10 by , 15 years ago
Replying to Devol:
Sorry , but the Sleep doesn`t solve the problem(just tried it).
AdlibUnregister should stop a registered function to be executed, right?
So what if it`s important that an function really needs to be stopped?
In my opinion it`s a bug, sry..
It only works with global variables:
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
Global $Label, $iPos = 0 , $sleep = 30 , $schalter
$Form1 = GUICreate("Adlibtest - Sleep("&$sleep&")", 240, 100, 990, 30)
GUISetOnEvent(-3, "_Exit")
$Label = GUICtrlCreateLabel("Testlabel", 25, 14, 300, 16)
GUICtrlSetFont(-1, 11, 800, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Start",15,50,60,40)
GUICtrlSetOnEvent(-1,"_startadlib")
$Button2 = GUICtrlCreateButton("Stop",120,50,60,40)
GUICtrlSetOnEvent(-1,"_stopadlib")
GUISetState(@SW_SHOW)
While Sleep($sleep) ; the higher the sleep , the more often the labelswitch fails
WEnd
Func _startadlib()
GUICtrlSetData($Label,"Running")
$schalter=0
AdlibRegister("_Laufschrift")
EndFunc
Func _stopadlib()
$schalter = 1
AdlibUnRegister("_Laufschrift")
GUICtrlSetData($Label,"Stopped") ; labelswitch failing sometimes
EndFunc
Func _Exit()
Exit
EndFunc
Func _Laufschrift()
If $schalter = 1 Then Return
GUICtrlSetData($Label, StringMid("Running", $iPos) & " " & "Running")
$iPos += 1.8
If $iPos > StringLen("Running") Then $iPos = 0
EndFunc
comment:11 by , 15 years ago
| Resolution: | → No Bug |
|---|---|
| Status: | new → closed |
I agree that a global is "the solution" but the sleep can work in some case at least on my system.
There is nothing with the current implementation of AutoIt that we can do inside AutoIt.
You need to use Global to avoid such interaction between Adlib's

It's working for me, every time I hit Stop, it changes the label to Stopped. I even put the sleep at 1 second and still no issues with it.