Sorry for not translating my study into English, I believe you all can understand. My question is about changing variables between child threads, in the example below everything works, but when I try to get the sibling variable it is not catching, can someone help me sort it out, please !?
Code: Select all
#NoEnv
#NoTrayIcon
#SingleInstance, Force
Gui, Add, Button, h50 w200 vIrmao1 gIrmao1G, LIGAR IRMÃO 1
Gui, Add, Button, h50 w200 vIrmao2 gIrmao2G, LIGAR IRMÃO 2
Gui, Add, Button, h50 w200 gPaiGResetarFilho1, PARAR FILHO 1
Gui, Add, Button, h50 w200 gPaiGResetarFilho2, PARAR FILHO 2
Gui, Show, `t
return
; PAI LÊ VARIAVEL DOS FILHOS
;============================================
PaiGResetarFilho1:
ContadorFilho1 = Irmao01Thread.AhkGetVar.ContadorFilho1 ; pega variável de alguma thread
Irmao01Thread.AhkExec("MsgBox % ""PAI MANDOU EU (FILHO 1) PARAR DE CONTAR E FALAR ISSO!``nFILHO 1 PAROU DE CONTAR EM "" ContadorFilho1") ; executa esse comando em alguma thread externa a essa
Filho2FicaSabendo = 1
Sleep, 100
Filho2FicaSabendo = 0
return
PaiGResetarFilho2:
ContadorFilho2 = Irmao02Thread.AhkGetVar.ContadorFilho2 ; pega variável de alguma thread
Irmao02Thread.AhkExec("MsgBox % ""PAI MANDOU EU (FILHO 2) PARAR DE CONTAR E FALAR ISSO!``nFILHO 2 PAROU DE CONTAR EM "" ContadorFilho2") ; executa esse comando em alguma thread externa a essa
Filho1FicaSabendo = 1
Sleep, 100
Filho1FicaSabendo = 0
return
; THREADS DOS FILHOS
;============================================
toggleIrmao1 := 0
Irmao1G:
toggleIrmao1 := !toggleIrmao1
if (toggleIrmao1) {
GuiControl,, Irmao1, DESLIGAR IRMÃO 1
Irmao01Script := CriticalObject()
script:="
("
#NoEnv
#NoTrayIcon
Loop
{
ContadorFilho1 = %A_Index%
ToolTip, FILHO 1 ESTÁ CONTANDO: %ContadorFilho1%, 250, -50
PaiThread := AhkExported() ; pega variáveis do pai e vincula com o AhkGetVar para lançar dentro da thread
Filho1FicaSabendo := PaiThread.AhkGetVar.Filho1FicaSabendo ; nesse caso, está pegando a variável que veio do pai para lançar dentro dessa thread
if (Filho1FicaSabendo) {
MsgBox % ""FILHO 1 FICOU SABENDO QUE PAI PAROU SEU IRMÃO (FILHO 2)``nO FOFOQUEIRO TAMBÉM PAROU DE CONTAR EM: "" ContadorFilho1
PaiThread.AhkExec(""MsgBox % """"PAI FICA PUTO E MANDA ESSA MENSAGEM PQ VIU QUE O FILHO2 PAROU EM: """" ""ContadorFilho1) ; executa esse comando em alguma thread externa a essa
}
}
)"
Irmao01Thread:=AhkThread(script,&Irmao01Script)
} else {
Irmao01Thread.ahkTerminate()
GuiControl,, Irmao1, LIGAR IRMÃO 1
}
return
; IDK IF THAT IS CORRECT
; =========================================================
Irmao01Thread.AhkAssign("Irmao02ThreadPtr", &Irmao02Thread "")
; =========================================================
; IDK IF THAT IS CORRECT
toggleIrmao2 := 0
Irmao2G:
toggleIrmao2 := !toggleIrmao2
if (toggleIrmao2) {
GuiControl,, Irmao2, DESLIGAR IRMÃO 2
Irmao02Script := CriticalObject()
script:="
("
#NoEnv
#NoTrayIcon
Loop
{
ContadorFilho2 = %A_Index%
ToolTip, FILHO 2 ESTÁ CONTANDO: %ContadorFilho2%, 250, -30
PaiThread := AhkExported() ; pega variáveis do pai e vincula com o AhkGetVar para lançar dentro da thread
Filho2FicaSabendo := PaiThread.AhkGetVar.Filho2FicaSabendo ; nesse caso, está pegando a variável que veio do pai para lançar dentro dessa thread
if (Filho2FicaSabendo) {
; MY PROBLEM IS HERE - ContadorFilho1 DONT GET
; ==============================================================================
Irmao02Thread := Object(Irmao02ThreadPtr) ; OU USE criticalobject()
ContadorFilho1 := Irmao02Thread.AhkGetVar.ContadorFilho1
MsgBox % ""FILHO 2 VIU QUE IRMÃO 1 PAROU DE CONTAR EM: "" ContadorFilho1
; ==============================================================================
; MY PROBLEM IS HERE - ContadorFilho1 DONT GET
MsgBox % ""FILHO 2 FICOU SABENDO QUE PAI PAROU SEU IRMÃO (FILHO 1)``nO FOFOQUEIRO TAMBÉM PAROU DE CONTAR EM: "" ContadorFilho2
PaiThread.AhkExec(""MsgBox % """"PAI FICA PUTO E MANDA ESSA MENSAGEM PQ VIU QUE O FILHO2 PAROU EM: """" ""ContadorFilho2) ; executa esse comando em alguma thread externa a essa
}
}
)"
Irmao02Thread:=AhkThread(script,&Irmao02Script)
} else {
Irmao02Thread.ahkTerminate()
GuiControl,, Irmao2, LIGAR IRMÃO 2
}
return
GuiClose:
ExitApp